概述
请各位大神帮帮忙,实在想不明白问题在哪。我想用二分法求零点,待求函数为HS(t)的调用函数。代码如下
主程序是这个:
%二分法迭代求解思路
%初始化
clc
cla
clear all
close all
%输入参数
a=1.44;
b=0.66;
mc=0.2;
er=0.2;
%迭代
t1=300;
t2=3000;
d=0.1;
l=t2-t1;
cc=0;
while l>d
t=(t1+t2)/2;
if HS(t1)*HS(t)<0
t2=t;
else if HS(t1)*HS(t)>0
t1=t;
else
t1=t;t2=t;
end
l=l/2;cc=cc+1;
end
x=(t1+t2)/2;
end
调用函数是这个:
function hs
clear;clc
res=HS(t)
function H =HS(t)
%先求中间参数w,m,H1
w=(12+a+16*b)*mc/(18*(1-mc));
m=er*(1+0.25*a-0.5*b);
H1=-118049.96+w*(-285830); %反应物焓变
%k1,k2需要t值即可求解
k(1)=exp(7082.848/t-6.567*log(t)+7.466*10^(-3)*t/2 -2.164*10^(-6)*t^2/6 +0.5*0.701*10^(-5)/t^2+32.541);%独立反应的平衡常数解k1和k2
k(2)=10^(5.47301*10^(-12)*t^4-2.57479*10^(-8.0)*t^3+4.63742*10^(-5.0)*t^2-3.91500*10^(-2.0)*t+13.2097);
%利用fsolve函数求解非线性方程组未知数x1~x5
%未知数个数n
n=5;
%迭代初值
x0=rand(n,1);
%迭代精度E为0.001
options=optimoptions('fsolve','Display','iter','Tolfun',1e-3,'TolX',1e-4);
%迭代方程组如下:
f=@(x)[
x(2)+x(3)+x(5)-1;
x(2)+2*x(3)+x(4)-w-b-2*m;
x(5)-k(1)*x(1)^2;
x(1)*x(3)-k(2)*x(2)*x(4);
2*x(1)+2*x(4)+4*x(5)-a-2*w;];
%迭代解
x=fsolve(f,x0,options);
%各产物焓变h:需要代入t值即可得到
Ho2=0.0030*t^2+28.5508*t-182.0309-(0.0030*298^2+28.5508*298-182.0309);%氧气
Hco2=0.008398*t^2+ 36.79*t-2592-(0.008398*298^2+ 36.79*298-2592)-393520;%二氧化碳
Hh2o= 0.005957*t^2+ 29.28*t+ 669.4-(0.005957*298^2+ 29.28*298+ 669.4)-241820;%水
Hch4=-5.746e-06*t^3+0.03734*t^2+14.01*t+2593-(-5.746e-06*298^3+0.03734*298^2+14.01*298+2593)-74850;%甲烷
Hco=0.0029*t^2+27.17*t+289.1-(0.0029*298^2+27.17*298+289.1)-110530;%一氧化碳
Hn2=0.002736*t^2+27.07*t+336-(0.002736*298^2+27.07*298)+336;%氮气
Hh2=0.0013*t^2+27.79*t+85.75-(0.0013*298^2+27.79*298+85.75);%氢气
%各产物焓变综合:需要h以及t值即可得到
H2=x(3)*Hco2+x(4)*Hh2o+x(5)*Hch4+x(2)*Hco+x(1)*Hh2+3.76*m*Hn2;
%系统焓变求解如下
H=H1-H2;
end
end
请大神帮忙看下,为什么每次运行怎么修改都提示在函数调用那条语句显示有:
错误使用 HS
输入参数太多。
出错 diedaichengxu (line 23)
if HS(t1)*HS(t)<0
请各位大神帮我看看,(1)我能不能把函数直接放到主程序里,不用调用省去麻烦,(2)如果不能放主程序那调用出现这个问题是为什么,我怎么更改呢?谢谢各位大神帮忙!
最后
以上就是无聊往事为你收集整理的matlab错误使用cd输入参数太多,错误使用函数,输入参数太多怎么解决的全部内容,希望文章能够帮你解决matlab错误使用cd输入参数太多,错误使用函数,输入参数太多怎么解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复