matlab利用for循环及fsolve函数解数组方程

matlab利用for循环及fsolve函数解数组方程。
如Ax+B=C,A,B,C均为向量,A=[1,2,3,4,5,6…]',求出x的所有值。
本文中需要求解的方程较为复杂,如图片所示。NN、MM、t、v、l均为列向量,求解T2、P、N2,其余参数均为常数。
需求解的方程如图片中所示结合for循环与fsolve函数对方程进行求解。
函数文件如下(表达式中方程均通过移项改写为不含除法的等式):

function eq=myfun2(p)
global t v l MM NN i 
S2=0.0499;
m=70;
g=9.8;
Pa=0.1*10.^6;
R=320;
V20=0.0069;
X2=0.75;
k=1.219;
T1=2949;
Q=1.03;
K0=0.6522;
Q22=0.4;
St=0.000397;
P=p(1);
N2=p(2);
T2=p(3);
eq(1)=((X2*k*T1*R.*NN(i))-(k-1)*S2.*P.*v(i))-T2.*(R.*(NN(i)+(k-1).*N2));
eq(2)=((MM(i)-N2.*t(i)).*T2.*R)-P.*(V20+S2.*l(i));
eq(3)=(Q22*K0.*P.*St)-N2.*((R.*T2).^(0.5));
end

脚本文件如下:

global t v l MM NN i
t=[0 7.46798E-06 1.4936E-05 2.24039E-05 2.98719E-05 6.72118E-05 0.000104552 0.000141892 0.000179232 0.000365931 0.000552631 0.00073933]';
v=[0 -5.00678E-05 -9.97945E-05 -0.000149178 -0.000198217 -0.000438178 -0.000669247 -0.000891203 -0.001103826 -0.002019452 -0.002670596 -0.003033269]';
l=[0 -1.87164E-10 -7.46962E-10 -1.67684E-09 -2.97423E-09 -1.4883E-08 -3.55866E-08 -6.47488E-08 -1.02025E-07 -3.97527E-07 -8.39624E-07 -1.37672E-06]';
MM=[8.435E-09 5.34858E-07 1.06428E-06 1.59667E-06 2.13205E-06 4.85335E-06 7.64797E-06 1.05149E-05 1.34534E-05 2.91855E-05 4.65705E-05 6.55032E-05]';
NN=[0.0440100000000000 0.0444490931018484 0.0448872450772039 0.0453244479498637 0.0457607159982832 0.0479279889460761 0.0500719706938977 0.0521928056854323 0.0542906780878086 0.0644415463843334 0.0740439392842003 0.0831186265744276]';
TT=zeros(12,1);
PP=zeros(12,1);
N22=zeros(12,1);
exit0=zeros(12,1);
f1=zeros(12,1);
f2=zeros(12,1);
f3=zeros(12,1);
for i=1:1:12
[p,fval,exitflag]=fsolve('myfun2',[100000,0.005,2000],optimset('Display','off'));
PP(i)=p(1);
N22(i)=p(2);
TT(i)=p(3);
exit0(i)=exitflag;
f1(i)=fval(1);
f2(i)=fval(2);
f3(i)=fval(3);
end

运行以上代码就能得到每一次循环中T2、P、N2的值,并且通过fval及exitflag的值能够判断出所求得解是否可信。初值的设定在一定程度上会影响解的结果,因此初值需要尽量设定在真解附近。也可通过fval及exitflag的值来修正初值,直至fval及exitflag为理想值为止。
可能需要注意几点:
1.一定要在函数文件及脚本文件都设置t、v、l、MM、NN、i为全局变量;
2.函数文件中尽可能不写除号,可将除法方程移项改写为乘法方程;
3.for循环一定要写在脚本文件里,写在函数文件里只能得到最后一次的运行结果。
本人自学小白,没有把握确定以上代码完全正确,仅为分享,轻喷。
若有欠缺错误,欢迎指正并一同探讨学习。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值