matlab画二元非线性方程,请教高手指点,用Matlab求解二元非线性方程的程序 (这个程序运行错误如何改正?)...

问题描述:

请教高手指点,用Matlab求解二元非线性方程的程序 (这个程序运行错误如何改正?)

%定义方程

function F=myfun(x,R)

A=250;c=20;h=1;d=0.08;r=0.10;Ie=0.12;Ip=0.15;t=1/12;a=200;b=2;w=-0.98;

syms T p;

p=x(1);

T=x(2);

F=[(a+b*c*(1-R)*(1-d*t)+b*t*(1-2*(w+d)*T)*(h+c*Ip*(1-R))/(T*w+d*T)+b*c*d*(1-R)*(T-t))/(2*b)-p;sqrt(A+t*(a-b*p)*(h+c*Ip*(1-R))/(c*d*(w+d)*(1-R)*(a-b*p)))-T];

%求解

A=250;c=20;h=1;d=0.08;r=0.10;Ie=0.12;Ip=0.15;t=1/12;a=200;b=2;w=-0.98;

R=0; TP=0;

syms p T;

x0=[10; 0.1];

R=0:0.05:0.6

for i=1:1:12

RR=R(i);

x=fsolve(@myfun(x,RR),x0,optimset('display','off'));

p(i)=x(1)

T(i)=x(2)

end

请高手指点,谢谢

我将求解部分进行改进一下还是不行呢?

A=250;c=20;h=1;d=0.08;r=0.10;Ie=0.12;Ip=0.15;t=1/12;a=200;b=2;w=-0.98;

R=0; TP=0;

syms p T;

x0=[4; 0.01];

i=0;

for R=0:0.05:0.6

i=i+1;

RR=R(i);

x=fsolve(@(x) myfun(x,RR),x0,optimset('display','off'));

p(i)=x(1)

T(i)=x(2)

end

1个回答

分类:

综合

2014-12-01

问题解答:

我来补答

不知道到你为什么把程序搞这么复杂.直接把各个参数带入方程啊.直接用fsolve.

fsolve用法:

x=fsolve(fun,x0)求解fun(x)=0的解,x0是初值,fun是函数,x就是解

因为fsolve使用迭代法求解方程的,所以总要有个迭代的初值吧,这个初值就是你给的x0.

比如解方程组

x(1).^2+x(2).^2=1

x(1)=2*x(2)

可以写成

f=@(x)([x(1).^2+x(2).^2-1;x(1)-2*x(2)])

x=fsolve(f,[1 1])

这里[1 1]就是初值,其实初值一般情况下可以随便给的.

再问: 非常感谢您的精彩回答~ 原来程序中之所有循环因为里面有一个参数M是不断变化的,用循环表示M的变化,式子中真正所求的变量是p和T。按照您的建议我修改如下: 假定M=0;如下: f=@(x)([(200-p*0.48*M/T+80*(1-0.08*1/12)*(1-0.1*M)+1/3*(1/T/+1.8)/(-0.9)+6.4(1/(6*T)+0.9*T-1/12*(-0.9))/(-0.9))/8-p;……); x=fsolve(f,[0.1,0.1]) 结果:x =0.1000 0.1000 问题是:当x起始终会等于所设定的初始值,篇幅限制 抱歉

再答: 不会啊。(估计你方程写错了。仔细检查啊) 随便举个例子: f=@(x)([x(1).*exp(42*x(2)+x(3))-32461;x(1).*exp(46*x(2)+x(3))-32689;x(1).*exp(51*x(2)+x(3))-35417]);x=fsolve(f,[1 1 1]) 结果: x = 0.0000 1.0000 0.8984

展开全文阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值