用matlab解复杂方程组

2025-01-24 06:34:19
推荐回答(5个)
回答1:

function hhh
To=400
Tf=0.75*To+0.25*302
V=0.6*4.6*0.3/sqrt(1+1)*sqrt(2*9.8*2.5*(Tf-302)/302)
Nu=4.9+0.0606*(V/4.6/0.04*0.04/0.000016*0.701*2*0.04/2.5)^1.2/(1+0.0909*(V/4.6/0.04*0.04/0.000016*0.701*2*0.04/2.5)^0.7*0.701^0.17)
h=0.0267*Nu/2.5
q=1.128*V*1005*(Tf-302)/0.75/4.6/2.2
eq1=sym('(Tg-302)/(1/23.26+0.01/1.1)+h*(Tg-Tf)+hwg*(Tg-Tw)=0.7*600');
eq2=sym('h*(Tg-Tf)+h*(Tw-Tf)=q');
eq5=sym('h*(Tw-Tf)+1/(1/8.72+0.2/0.49)*(Tw-299)+hwg*(Tw-Tg)=0');
%eq7=sym('5.67*10^8*(Tg^2+Tw^2)*(Tw+Tg)/(1/0.8+1/0.94-1)=hwg');
[Tg,Tw,hwg]=solve(eq1,eq2,eq5,'Tg,Tw,hwg');
Tg=subs(Tg),Tw=subs(Tw),hwg=subs(hwg)
hwg1=5.67*10^8*(Tg^2+Tw^2)*(Tw+Tg)/(1/0.8+1/0.94-1)
x0=[Tg h Tf hwg Tw q To Nu V]
%x0=[11.2698 0.9291 455.5052 -1.8440 -11.2698 113.7074 487.3698 97.0550 0.0031]
fsolve(@myfuns,x0)
function eqs=myfuns(x)
Tg=x(1);h=x(2);Tf=x(3);hwg=x(4);Tw=x(5);q=x(6);To=x(7);Nu=x(8);V=x(9);
eq1=(Tg-302)/(1/23.26+0.01/1.1)+h*(Tg-Tf)+hwg*(Tg-Tw)-0.7*600;
eq2=h*(Tg-Tf)+h*(Tw-Tf)-q;
eq3=1.128*V*1005*(Tf-302)/0.75/4.6/2.2-q;
eq4=0.75*To+0.25*302-Tf;
eq5=h*(Tw-Tf)+1/(1/8.72+0.2/0.49)*(Tw-299)+hwg*(Tw-Tg);
eq6=0.6*4.6*0.3/sqrt(1+1)*sqrt(2*9.8*2.5*(Tf-302)/302)-V;
eq7=5.67*10^8*(Tg^2+Tw^2)*(Tw+Tg)/(1/0.8+1/0.94-1)-hwg;
eq8=0.0267*Nu/2.5-h;
eq9=4.9+0.0606*(V/4.6/0.04*0.04/0.000016*0.701*2*0.04/2.5)^1.2/(1+0.0909*(V/4.6/0.04*0.04/0.000016*0.701*2*0.04/2.5)^0.7*0.701^0.17)-Nu;
eqs=[eq1;eq2;eq3;eq4;eq5;eq6;eq7;eq8;eq9];

结果:
Optimizer appears to be converging to a point which is not a root.
Norm of relative change in X is less than max(options.TolX^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess.

ans =

1.0e+004 *

-3.6696 0.0000 0.0376 -0.0002 3.6696 2.2196 0.0400 0.0020 0.0002

回答2:

对,你的方程个数多于你的未知数个数了,所以是不一定能解出来的。这应该是一个求最优解的问题,就是所需解代入原方程后使某个特定参数的方差为最小。由于你的方程组不是那种典型的
二元一次方程组
,不能用
最小二乘法
解,解法我也就不清楚了。水平有限,无能为力……
你是想单独解每一个方程还是解他们组成的方程组啊?,我突然想到可能是前者呃

回答3:

你的方程相当于只有一格未知数polylog(n,z)
而方程个数却使2个,除非线性相关,不然定无解
如果不是你的那个方程的话用matlab解
你可以试一试maple('solve','eq'),eq为所要解的方程

回答4:

总体思路:根据要保留元素的条件使用find()命令或者使用for循环对每个元素进行检测,不满足条件的元素赋值为0
参考代码
clc
clear
all
close
all
%--
使用find()语句
--%
x
=
[1+2i
2+3i
3+4i];
ix
=
find(x~=(2+3i));
%
只保留2+3i,其他元素变成0
x(ix)
=
0;
disp('x=');
disp(x);
%--------------------%
%--
使用for循环语句
--%
x1
=
[1+2i
-2+3i
3+4i
-8-5i];
for
i=1:length(x1)
%
假设只保留元素实部大于零的
if(
real(x1(i))<0
)
x1(i)
=
0;
end
end
disp('x1=');
disp(x1);
%--------------------%
输出效果
x=
0.0000
+
0.0000i
2.0000
+
3.0000i
0.0000
+
0.0000i
x1=
1.0000
+
2.0000i
0.0000
+
0.0000i
3.0000
+
4.0000i
0.0000
+
0.0000i

回答5:

总体思路:根据要保留元素的条件使用find()命令或者使用for循环对每个元素进行检测,不满足条件的元素赋值为0

参考代码
clc
clear all
close all
%-- 使用find()语句 --%
x = [1+2i 2+3i 3+4i];
ix = find(x~=(2+3i)); % 只保留2+3i,其他元素变成0
x(ix) = 0;
disp('x=');
disp(x);
%--------------------%
%-- 使用for循环语句 --%
x1 = [1+2i -2+3i 3+4i -8-5i];
for i=1:length(x1) % 假设只保留元素实部大于零的
if( real(x1(i))<0 )
x1(i) = 0;
end
end
disp('x1=');
disp(x1);
%--------------------%

输出效果
x=
0.0000 + 0.0000i 2.0000 + 3.0000i 0.0000 + 0.0000i
x1=
1.0000 + 2.0000i 0.0000 + 0.0000i 3.0000 + 4.0000i 0.0000 + 0.0000i