Matlab代码报错,求助如何修改,感谢

源代码
clc;clear all;
syms t x T
a1=15;a2=3;a3=6;c2=20;c1=1;n=3;m=2;
SF1=@(t)exp(-a1.*(t.^m));F1=@(t)1-SF1(t);SF2=@(t)exp(-a2.*(t.^m));F2=@(t)1-SF2(t);SF3=@(t)exp(-a3.*(t.^m));F3=@(t)1-SF3(t);
SFw=@(t)SF1(t).*SF2(t).*SF3(t)+F1(t).*F2(t).*SF3(t)+F1(t).*SF2(t).*SF3(t)+SF1(t).*F2(t).*SF3(t)+SF1(t).*SF2(t).*F3(t);
h=@(T)-diff(log(SFw(T)),T);
u=@(T)int(SFw(t),t,0,T);
fun=@(T)h(T).*u(T)-(1-SFw(T))-n.*c1./c2;
fsolve(fun(T),0.2)

报错提示
错误使用 lsqfcnchk (line 108)
如果 FUN 为 MATLAB 对象,则它必须具有 feval 方法。

出错 fsolve (line 210)
funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);

出错 c1w1 (line 9)
fsolve(fun(T),0.2)

Matlab代码执行到了fsolve(fun(T),0.2)这句时出现了出错,分析了题主的代码其根本的原因是,因为自定义的fun(T)是不存在,而是fun(t,T),实际上应该是fun(t)的函数。

下面我们逐步分析每个代码,靠左边为正确写法,%后为问题解释

clc;close all;

syms t %这里x和T在下列代码没有用上,所以对x和T无需进行声明变量

a1=15;a2=3;a3=6;c2=20;c1=1;n=3;m=2;

SF1=exp(-a1.*(t.^m)); %因为已经对t进行声明变量,所以无需自定义SF1=@(t)exp(-a1.*(t.^m))

F1=1-SF1; %理由同上

SF2=exp(-a2.*(t.^m));%理由同上

F2=1-SF2;%理由同上

SF3=exp(-a3.*(t.^m));%理由同上

F3=1-SF3;%理由同上

SFw=SF1.*SF2.*SF3+F1.*F2.*SF3+F1.*SF2.*SF3+SF1.*F2.*SF3+SF1.*SF2.*F3;%理由同上

h=-diff(log(SFw),t); %由于SFw是t的函数,而不存在是T的函数,该导数为零,显然与你的本意是不相符

u=int(SFw,t,0,t); %由于SFw是t的函数,虽然得到结果变成了u(T)的函数,但对后面的fun函数出现了两个变量,即t和T;

eq=h.*u-(1-SFw)-n.*c1./c2 %这里增设一个等式,是为了便于理解

fun=@(t)eval(eq); %自定义fun(t)的函数

T=fsolve(fun,0.2) %求解T值

执行上述代码,即可得到结果。

温馨提示:答案为网友推荐,仅供参考
相似回答