2017-04-05 50 views
0

功能我通过数学的方式安装的一些功能像这样FindMinimum与数学

parameter = {a, b}; 
parameter 
data = {{0, 1.2}, {0, 0.1}, {0.1, 0.2}, {1.1, 0}} 
Ftest[x_, y_] := a*x^2 + b*y^2 
fit = FindMinimum[Total[(Ftest @@@ data - 2)^2], parameter] 
ContourPlot[(Ftest[x, y] /. fit[[2]]) == 2, {x, 0, 1.5}, {y, 0, 1.5}, 
Epilog -> {Red, Point /@ data}] 

有了适当的结果。但是我的实际作用更为复杂,由窦/余弦/反余弦函数的一些指数,以8.电源使用我的实际功能,实际的代码我得到一些错误:

The function value {3.74166 (-2.+81. (256. Power[<<2>>]+256. Power[<<2>>]+256. Power[<<2>>]) (Times[<<4>>]+Times[<<2>>])^4)^2} is not a list of real numbers with dimensions {1} at {apb3d,bpb3d,cpb3d,fpb3d,gpb3d,hpb3d} = {1.,1.,1.,1.,1.,1.}. >> 

我想要的功能拟合是在x为0和90的区域,而y在0和2之间。但是由于它是一系列的正弦函数,所以拟合函数是syme​​rtical。我想要拟合的参数在-2和2之间。已经执行了一些已知参数值的测试,因此实际功能是正确的。 Mathematica是否需要进一步的输入以限制对参数的搜索?

+0

由于在{apb3d,bpb3d,cpb3d,fpb3d,gpb3d,hpb3d} = {1.,1.,1.,1.,1.,1}时出现错误消息说YourFunction不是真实的,请尝试YourFunction/。{apb3d-> 1.,bpb3d-> 1.,cpb3d-> 1.,fpb3d-> 1.,gpb3d-> 1.,hpb3d-> 1},看看结果是什么。 – Bill

+0

您可以在'FindMinimum'参数中指定约束。在文档中查看几个例子。 – agentp

+0

当我插入apb3d = 1的值和其他参数以及我的函数看起来应该如此。然而,当我在另一个prorgam中绘制函数时,我的函数中会出现一些小波, Excel中。 – YaY

回答

1

谢谢你的你正在尝试做的所有细节。这对于获得可以使用的答案至关重要。

要尽量做到非常精确的这个追查错误,如果我评价这个

mpb3d=8; sigxx=x; sigyy=y; sigzz=0; sigxy=z; sigxz=0; sigyz=0; 
Ab3d=(sigyy-sigzz)*apb3d; Bb3d=(sigzz-sigxx)*bpb3d; 
Cb3d=(sigxx-sigyy)*cpb3d; Fb3d=(sigyz)*fpb3d; 
Gb3d=(sigxz)*gpb3d; Hb3d=(sigxy)*hpb3d; 
I2b3d=(Fb3d^2+Gb3d^2+Hb3d^2)/3+((Ab3d-Cb3d)^2+(Cb3d-Bb3d)^2+(Bb3d-Ab3d)^2)/54; 
I3b3d=((Cb3d-Bb3d)*(Ab3d-Cb3d)*(Bb3d-Ab3d))/54+Fb3d*Gb3d*Hb3d- 
    ((Cb3d-Bb3d)*Fb3d^2+(Ab3d-Cb3d)*Gb3d^2+(Bb3d-Ab3d)*Hb3d^2)/6; 
thetab3d = ArcCos[I3b3d/((I2b3d)^(3/2))]; 
phib3d=(3*I2b3d)^(mpb3d/2)*((2*Cos[(2*thetab3d+Pi)/6])^mpb3d + 
    (2*Cos[(2*thetab3d-3*Pi)/6])^mpb3d+(-2*Cos[(2*thetab3d+5*Pi)/6])^mpb3d); 
nYoFIT3D112212={{-(160/313),160/313,0},{1,0,0},{290/313,21/313, 78/313}, 
    {236/313,79/313,137/313},{8/17,8/17,152/313},{76/313,227/313,131/313}, 
    {21/313,294/313,79/313},{0,333/313,0}}; 
parameter = {apb3d, bpb3d, cpb3d, hpb3d}; 
Ftest[x_, y_, z_] := phib3d; 
Total[(Ftest @@@ nYoFIT3D112212 - 2)^2] 

,看你要给FindMinimum到底是什么,然后它会显示

8*(-2+81*(((bpb3d*x+cpb3d*(x-y))^2+(-(bpb3d*x)-apb3d*y)^2+(-(cpb3d*(x-y))+apb3d*y)^2)/54+ 
    (hpb3d^2*z^2)/3)^4*(256*Cos[(-3*Pi+2*ArcCos[(((bpb3d*x+cpb3d*(x-y))*(-(bpb3d*x)-apb3d*y)* 
    etc, etc, etc. 

请注意,您所有的x,y,z都保持不变,并且没有一个被nYoFIT3D112212中的三元组替代,就像我假设您期望发生的那样。

这是我试图让你发现的关键一步。

有可能有几种不同的方法来解决这个问题。其一是,如果我取代

Total[(Ftest @@@ nYoFIT3D112212 - 2)^2] 

Total[Map[(phib3d-2)^2/.{x->#[[1]],y->#[[2]],z->#[[3]]} &,nYoFIT3D112212]] 

后来我看到所有的x,y,z将nYoFIT3D112212系数代替。

那么这

fittning=FindMinimum[ 
    Total[Map[(phib3d-2)^2/.{x->#[[1]],y->#[[2]],z->#[[3]]}&,nYoFIT3D112212]], parameter] 

不再抱怨不是真正{}的列表。

请仔细检查所有内容,以确保在每一步中都对x,y,z进行了正确的替换,并且没有其他错误潜藏在我所做的事情中。

+0

工作得很好,我需要添加并改变我的测量数据,但这根本就没有问题。然而,我遇到了另一个关于在使用该行时显示我的函数的问题: ContourPlot [(Ftest [x,y,z] /。fittning [[2]])== 2,{x,0,1.5} {y, 0,1.5},{z,0,1.5},结语 - > {红色,点/ @ nYoFIT3D112212}] 结果于: “期望的选项(而不是{z,0,1.5'} )位于\ 以外的位置3 ContourPlot [(Ftest [x,y,z] /。\ fittning [[2]])== 2,{x,0,1.5'},{y,0,1.5'} ,{z,0,1.5'},Epilog - > {Red,\ Point/@ nYoFIT3D112212}]。选项必须是规则或规则列表。“ – YaY

+0

@YaY首先,ContourPlot不接受{x,0,1.5},{y,0,1.5},{z,0,1.5}。阅读ContourPlot的帮助页面,使其用法几乎与他们的示例中的一样。如果这不能解决问题,那么绘图函数通常会改变事物的评估方式。我建议用一个新名称定义一个完整的函数,然后将该函数赋给Plot,而不是尝试在Plot的参数内部动态创建一些函数。接下来,您可以尝试使用Show将您的Plot与Graphics3D [Point/@ nYoFIT3D112212]结合起来,再次尝试避免Plot内的评估问题 – Bill

0

为了更加准确,我添加了我想要的功能。 来源于:

mpb3d = 8; 

sigxx = x; 
sigyy = y; 
sigzz = 0; 
sigxy = z; 
sigxz = 0; 
sigyz = 0; 

Ab3d = (sigyy - sigzz)*apb3d; 
Bb3d = (sigzz - sigxx)*bpb3d; 
Cb3d = (sigxx - sigyy)*cpb3d; 
Fb3d = (sigyz)*fpb3d; 
Gb3d = (sigxz)*gpb3d; 
Hb3d = (sigxy)*hpb3d; 

I2b3d = (Fb3d^2 + Gb3d^2 + Hb3d^2)/ 
    3 + ((Ab3d - Cb3d)^2 + (Cb3d - Bb3d)^2 + (Bb3d - Ab3d)^2)/54; 
I3b3d = ((Cb3d - Bb3d)*(Ab3d - Cb3d)*(Bb3d - Ab3d))/54 + 
    Fb3d*Gb3d* 
    Hb3d - ((Cb3d - Bb3d)*Fb3d^2 + (Ab3d - Cb3d)* 
     Gb3d^2 + (Bb3d - Ab3d)*Hb3d^2)/6; 

thetab3d = ArcCos[I3b3d/((I2b3d)^(3/2))]; 

phib3d = (3*I2b3d)^(mpb3d/2)*((2*Cos[(2*thetab3d + Pi)/6])^ 
    mpb3d + (2*Cos[(2*thetab3d - 3*Pi)/6])^ 
    mpb3d + (-2*Cos[(2*thetab3d + 5*Pi)/6])^mpb3d) 

这导致功能我想解决作为phib3d:

1 (1/54 ((bpb3d x + cpb3d (x - y))^2 + (-bpb3d x - 
     apb3d y)^2 + (-cpb3d (x - y) + apb3d y)^2) + (hpb3d^2 z^2)/ 
    3)^4 (256 Cos[ 
    1/6 (-3 \[Pi] + 
     2 ArcCos[(1/ 
       54 (bpb3d x + cpb3d (x - y)) (-bpb3d x - 
       apb3d y) (-cpb3d (x - y) + apb3d y) - 
      1/6 hpb3d^2 (-bpb3d x - apb3d y) z^2)/(1/ 
       54 ((bpb3d x + cpb3d (x - y))^2 + (-bpb3d x - 
        apb3d y)^2 + (-cpb3d (x - y) + apb3d y)^2) + (
      hpb3d^2 z^2)/3)^(3/2)])]^8 + 
    256 Cos[1/ 
     6 (\[Pi] + 
     2 ArcCos[(1/ 
       54 (bpb3d x + cpb3d (x - y)) (-bpb3d x - 
       apb3d y) (-cpb3d (x - y) + apb3d y) - 
      1/6 hpb3d^2 (-bpb3d x - apb3d y) z^2)/(1/ 
       54 ((bpb3d x + cpb3d (x - y))^2 + (-bpb3d x - 
        apb3d y)^2 + (-cpb3d (x - y) + apb3d y)^2) + (
      hpb3d^2 z^2)/3)^(3/2)])]^8 + 
    256 Cos[1/ 
     6 (5 \[Pi] + 
     2 ArcCos[(1/ 
       54 (bpb3d x + cpb3d (x - y)) (-bpb3d x - 
       apb3d y) (-cpb3d (x - y) + apb3d y) - 
      1/6 hpb3d^2 (-bpb3d x - apb3d y) z^2)/(1/ 
       54 ((bpb3d x + cpb3d (x - y))^2 + (-bpb3d x - 
        apb3d y)^2 + (-cpb3d (x - y) + apb3d y)^2) + (
      hpb3d^2 z^2)/3)^(3/2)])]^8) 

与变量x,y和z(在11,22和12方向的应力)和参数apb3d,bpb3d,cpb3d,hpb3d。

及配件数据:

nYoFIT3D112212 = {{-(160/313), 160/313, 0}, {1, 0, 0}, {290/313, 21/313, 78/313}, {236/ 
     313, 79/313, 137/313}, {8/17, 8/17, 152/313}, {76/313, 227/313, 131/ 
     313}, {21/313, 294/313, 79/313}, {0, 333/313, 0}} 

我要解决通过:

parameter = {apb3d, bpb3d, cpb3d, hpb3d}; 

Ftest[x_, y_, z_] := phib3d 

fittning = 
FindMinimum[Total[(Ftest @@@ nYoFIT3D112212 - 2)^2], parameter] 

ContourPlot[(Ftest[x, y, z] /. fittning[[2]]) == 2, {x, 0, 1.5}, {y, 
    0, 1.5}, {z, 0, 1.5}, Epilog -> {Red, Point /@ nYoFIT3D112212}];