![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
matlab fzero的使用问题
我在使用fzero时之前找function[dP]=Kfun(K)关于K的零点时可以用K=fzero(@Kfun,[0,1])实现,之后需要找function[dP]=K...
我在使用fzero时之前找function [dP]=Kfun(K)关于K的零点时可以用K=fzero(@Kfun,[0,1])实现,之后需要找function [dP]=Kfun(P, V, A, J, K)关于K的零点,其中PVAJ是在上一级程序中用户输入的量,但我发现这四个量虽然在上一级方程中已知,但依旧会报错Undefined function or variable 'V'之类的错。请问该如何实现我想要的功能?
%--------------------------------------------------
下面是可以实现的:
function dP=Kfun(K);
Ak=0;
Vk=200;
Pk=500000;
Jk=1;
T10=sqrt(Vk/Jk);
P0=2*Jk*T10^3;
if P0>Pk
display 'Pk is smaller thAk the position at K0';
dP=1000000;
elseif K==1
if Vk==0
T1=(Pk/(4*Jk))^(1/3);
dP=1000000;
else
dP=100000000;
end
else
T1=sqrt(Vk/(Jk*(1-K^2)));
T2=K*T1;
P=Jk*T1^3+Jk*T2^3+2*Vk*T2;
dP=P-Pk;
end
%------------------------------------------------------------------
下面是无法实现的:
function dP=Kfun(Pk,Vk,Ak,J,K);
T10=sqrt(Vk/Jk);
P0=2*Jk*T10^3;
if P0>Pk
display 'Pk is smaller thAk the position at K0';
dP=1000000;
elseif K==1
if Vk==0
T1=(Pk/(4*Jk))^(1/3);
dP=1000000;
else
dP=100000000;
end
else
T1=sqrt(Vk/(Jk*(1-K^2)));
T2=K*T1;
P=Jk*T1^3+Jk*T2^3+2*Vk*T2;
dP=P-Pk;
end 展开
%--------------------------------------------------
下面是可以实现的:
function dP=Kfun(K);
Ak=0;
Vk=200;
Pk=500000;
Jk=1;
T10=sqrt(Vk/Jk);
P0=2*Jk*T10^3;
if P0>Pk
display 'Pk is smaller thAk the position at K0';
dP=1000000;
elseif K==1
if Vk==0
T1=(Pk/(4*Jk))^(1/3);
dP=1000000;
else
dP=100000000;
end
else
T1=sqrt(Vk/(Jk*(1-K^2)));
T2=K*T1;
P=Jk*T1^3+Jk*T2^3+2*Vk*T2;
dP=P-Pk;
end
%------------------------------------------------------------------
下面是无法实现的:
function dP=Kfun(Pk,Vk,Ak,J,K);
T10=sqrt(Vk/Jk);
P0=2*Jk*T10^3;
if P0>Pk
display 'Pk is smaller thAk the position at K0';
dP=1000000;
elseif K==1
if Vk==0
T1=(Pk/(4*Jk))^(1/3);
dP=1000000;
else
dP=100000000;
end
else
T1=sqrt(Vk/(Jk*(1-K^2)));
T2=K*T1;
P=Jk*T1^3+Jk*T2^3+2*Vk*T2;
dP=P-Pk;
end 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏15(财富值+成长值)
展开全部
你可以试试这样设置函数句柄。仍然用你定义的函数function [dP]=Kfun(P, V, A, J, K)
现在假设你已经设置好了P,V,A,J的值(上一级已经输入)
求0点的表达式这么写:
K = fzeros(@(K)Kfun(P,V,A,J,K), K0); % 其中K0是初值
原因:
1) function [dP]=Kfun(P, V, A, J, K) 定义的函数句柄 @Kfun 实际等价于
function_handle = @(P,V,A,J,K)Kfun(P,V,A,J,K) 自变量共5个,所以fzero不知道你要算K
2) function_handle = @(K)Kfun(P,V,A,J,K) 相当于你固定了P,V,A,J四个参数,留下K做唯一一个自 变量。
形式如@(自变量1, 自变量2 ...)函数名(参数1, 参数2, ..., 自变量1,自变量2,...)
现在假设你已经设置好了P,V,A,J的值(上一级已经输入)
求0点的表达式这么写:
K = fzeros(@(K)Kfun(P,V,A,J,K), K0); % 其中K0是初值
原因:
1) function [dP]=Kfun(P, V, A, J, K) 定义的函数句柄 @Kfun 实际等价于
function_handle = @(P,V,A,J,K)Kfun(P,V,A,J,K) 自变量共5个,所以fzero不知道你要算K
2) function_handle = @(K)Kfun(P,V,A,J,K) 相当于你固定了P,V,A,J四个参数,留下K做唯一一个自 变量。
形式如@(自变量1, 自变量2 ...)函数名(参数1, 参数2, ..., 自变量1,自变量2,...)
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询