24小时热门版块排行榜    

查看: 3014  |  回复: 19

521438

铜虫 (初入文坛)

引用回帖:
10楼: Originally posted by xiegangmai at 2012-05-09 12:31:19:
你的函数里包含符号I1,I2,肯定解不出数值解的。
不用简化,把数学模型贴出来看看。

我的函数表达式如下:B=I*r^2/2*(r^2+z^2)^(-3/2);
方程组分别是:
I1*d3Bdz3(z=a1)+I2*d3Bdz3(z=a2)=0
I1*d5Bdz5(z=a1)+I2*d5Bdz5(z=a2)=0
I1*d7Bdz7(z=a)+I2*d7Bdz7(z=a2)=0备注:这里的d3Bdz3,d5Bdz5,d7Bdz7是B对z求3,5,7阶导数。然后我程序里面的式子就是分别求出3,5,7阶导数后的表达式!版主帮我看看怎么修改程序啊?谢谢!
11楼2012-05-09 16:33:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wjx0162

银虫 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
臭水沟: 金币+1, 谢谢交流~~ 2012-05-10 12:05:02
MATLAB求解参数方程基本是忽悠人,建议你把参数代入方程,直接用他的非线性方程组求解方法来解。因为大多非线性方程组没有解析解。
12楼2012-05-10 11:30:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

引用回帖:
12楼: Originally posted by wjx0162 at 2012-05-10 11:30:37:
MATLAB求解参数方程基本是忽悠人,建议你把参数代入方程,直接用他的非线性方程组求解方法来解。因为大多非线性方程组没有解析解。

我是把参数带入求解了,是不是我的初值设置的有问题啊!fsolve函数需要给定初值,大概是多少我也不知道,有没有什么更好的办法啊?
13楼2012-05-10 11:36:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai

版主 (职业作家)

我没头衔

优秀版主优秀版主优秀版主

引用回帖:
13楼: Originally posted by 521438 at 2012-05-10 11:36:04:
我是把参数带入求解了,是不是我的初值设置的有问题啊!fsolve函数需要给定初值,大概是多少我也不知道,有没有什么更好的办法啊?

多数情况下是不知道初值的,只有多试几次,解出数值解了,再把这组解作为初值,代入后求解,多迭代几次,再算算误差。

[ 发自手机版 http://muchong.com/3g ]
明德厚学、求是创新
14楼2012-05-10 15:23:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

这里我想给表达式里的符号变量赋予初值,出现如下错误:??? Conversion to double from sym is not possible.

Error in ==> sfdnls at 95
      J(:,k) = (v-valx)/alpha(k);

Error in ==> optim\private\trustnleqn at 108
  [JACfindiff,numFDfevals] = sfdnls(x,Fvec,JACfindiff,group,[], ...

Error in ==> fsolve at 295
    [x,FVAL,JACOB,EXITFLAG,OUTPUT,msg]=...

Error in ==> fsolveDemon1 at 4
x=fsolve(@f,x0,opt);
就是不能把符号型变量转换成double型的,大家知道我应该怎么赋值么?需要如何修改啊?
15楼2012-05-10 16:19:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

我的程序如下:
function x=fsolveDemon1
x0=[1.0;0.25;0.4];
opt=optimset('Display','off')
x=fsolve(@f,x0,opt);
function F=f(x)
syms I1 I2 r1 r2 a1 a2
r1=x(1);
r2=x(2);
a1=x(3);
a2=x(3);
F=[I1*r1^2*(3*a1*(r1^2+a1^2)^(-7/2)-7*a1^3*(r1^2+a1^2)^(-9/2))+I2*r2^2*(3*a2*(r2^2+a2^2)^(-7/2)-7*a2^3*(r2^2+a2^2)^(-9/2));
I1*r1^2*(-5*a1*(r1^2+a1^2)^(-9/2)+30*a1^3*(r1^2+a1^2)^(-11/2)-33*a1^5*(r1^2+a1^2)^(-13/2))+I2*r2^2*(-5*a2*(r2^2+a2^2)^(-9/2)+30*a2^3*(r2^2+a2^2)^(-11/2)-33*a2^5*(r2^2+a2^2)^(-13/2));
I1*r1^2*(35*a1*(r1^2+a1^2)^(-11/2)-385*a1^3*(r1^2+a1^2)^(-13/2)+1001*a1^5*(r1^2+a1^2)^(-15/2)-715*a1^7*(r1^2+a1^2)^(-17/2))+I2*r2^2*(35*a2*(r2^2+a2^2)^(-11/2)-385*a2^3*(r2^2+a2^2)^(-13/2)+1001*a2^5*(r2^2+a2^2)^(-15/2)-715*a2^7*(r2^2+a2^2)^(-17/2))];
    end
end
16楼2012-05-10 16:21:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai

版主 (职业作家)

我没头衔

优秀版主优秀版主优秀版主

【答案】应助回帖

引用回帖:
16楼: Originally posted by 521438 at 2012-05-10 16:21:18:
我的程序如下:
function x=fsolveDemon1
x0=;
opt=optimset('Display','off')
x=fsolve(@f,x0,opt);
function F=f(x)
syms I1 I2 r1 r2 a1 a2
r1=x(1);
r2=x(2);
a1=x(3);
a2=x(3);
F=;
    end
end

你这样的程序是根本求解不了的。
fsolve函数是求解非线性方程组数值解的,是不能带符号的。
B=I*r^2/2*(r^2+z^2)^(-3/2);这里面的I与I1、I2是什么关系?
把d3Bdz3,d5Bdz5,d7Bdz7写出来,分别带入
I1*d3Bdz3(z=a1)+I2*d3Bdz3(z=a2)=0
I1*d5Bdz5(z=a1)+I2*d5Bdz5(z=a2)=0
I1*d7Bdz7(z=a)+I2*d7Bdz7(z=a2)=0
三个方程,并写入f(x)中,I1、I2、r作为x(4)、x(5)、x(6),即F内六个表达式。

你先试试吧,不行了把数学模型用图贴出来吧,把已知条件和未知条件描述清楚。
明德厚学、求是创新
17楼2012-05-10 23:25:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

引用回帖:
17楼: Originally posted by xiegangmai at 2012-05-10 23:25:01:
你这样的程序是根本求解不了的。
fsolve函数是求解非线性方程组数值解的,是不能带符号的。
B=I*r^2/2*(r^2+z^2)^(-3/2);这里面的I与I1、I2是什么关系?
把d3Bdz3,d5Bdz5,d7Bdz7写出来,分别带入
I1*d3Bd ...

这里的I是电流,我的模型是4个圆线圈对称放置组成而成。所带电流分别为I1,I2。这里的数学表达式B=I*r^2/2*(r^2+z^2)^(-3/2)是单个圆线圈在轴线上产生的磁场表达式。具体到我的模型,电流i就为I1,I2.
版主所说的将I1,I2,作为x(4),x(5)这里也只是有3个方程啊,6个未知数,我加了约束条件使得a1=a2,就是5个未知数了。我再试试吧,我需要的不是具体的数值解,只要是能计算出R1,R2之间的关系,R1与a1之间的关系就行!
18楼2012-05-11 11:00:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

521438

铜虫 (初入文坛)

http://edu.muchong.com/attachment/04/4b/1801287_1336723264_727.jpg
这里我把我的数学模型也贴出来,如下:电流方向没有标注,2组线圈分别加反向的电流,即左侧的线圈是顺时针,右侧的电流方向为逆时针。


19楼2012-05-11 16:05:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Bruce_lee

铜虫 (著名写手)

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 谢谢参与! 2013-03-25 23:02:38
function F = fsolveDemon1(x,I)
%FUN Summary of this function goes here
%   Detailed explanation goes here
F=[I(1).*x(1).^2.*(3*x(3).*(x(1).^2+x(3).^2).^(-7/2)-7*x(3).^3*(x(1).^2+x(3).^2).^(-9/2))+I(2).*x(2).^2.*(3*x(3).*(x(2).^2+x(3).^2).^(-7/2)-7*x(3).^3.*(x(2).^2+x(3).^2).^(-9/2))
I(1).*x(1).^2*(-5*x(3).*(x(1).^2+x(3).^2).^(-9/2)+30*x(3).^3.*(x(1).^2+x(3).^2).^(-11/2)-33*x(3).^5.*(x(1).^2+x(3).^2).^(-13/2))+I(2).*x(2).^2.*(-5*x(3).*(x(2).^2+x(3).^2).^(-9/2)+30*x(3).^3.*(x(2).^2+x(3).^2).^(-11/2)-33*x(3).^5.*(x(2).^2+x(3).^2).^(-13/2))
I(1).*x(1).^2.*(35*x(3).*(x(1).^2+x(3).^2).^(-11/2)-385*x(3).^3.*(x(1).^2+x(3).^2).^(-13/2)+1001*x(3).^5.*(x(1).^2+x(3).^2).^(-15/2)-715*x(3).^7.*(x(1).^2+x(3).^2).^(-17/2))+I(2).*x(2).^2.*(35*x(3).*(x(2).^2+x(3).^2).^(-11/2)-385*x(3).^3.*(x(2).^2+x(3).^2).^(-13/2)+1001*x(3).^5.*(x(2).^2+x(3).^2).^(-15/2)-715*x(3).^7.*(x(2).^2+x(3).^2).^(-17/2))];
end
这是第一个函数。将其保存成fsolveDemon1.m文件。
function fsolveDemon2
x0=[0.1,0.1,0.1];  % x0中元素的个数与方程中x个数对应相等,这里取都取0.1,也可自己修改。
options=optimset('MaxFunEvals',20000,'MaxIter',2000);
I=[1,2];  % 向量I有两个值元素。这里权且取值1和2,自己可改成需要的数值。
X=fsolve(@(x)fsolveDemon1(x,I),x0,options);
for i=1:50   %迭代次数50次,可以自己修改。
    [X,fval,exitflag]=fsolve(@(x)fsolveDemon1(x,I),X,options);
end
clc;
X=vpa(X,8)   %显示8为数字结果,如果想多显示几位或少显示几位,可以自己修改数值。
fval
exitflag
end
这是第二个函数。将其保存成fsolveDemon2.m文件。
使用时先将两个文件拷贝到matlab能够调用的指定文件夹中,然后在命令窗口输入fsolveDemon2,回车即可。
结果中fval的值如果趋近于0,并且同时exitflag=1,这说明X就是所要求的解。
努力就有收获!
20楼2013-03-25 01:03:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 521438 的主题更新
信息提示
请填处理意见