查看: 298|回复: 6|关注: 0

[已解决] 如何求函数和方程在多种情况下的解

[复制链接]

新手

16 麦片

财富积分


050


3

主题

8

帖子

0

最佳答案
各位大佬,

小弟有一个函数:
  1. function [MeanFree]=calMeanFree(CD,Kc,L,q, C_out, C_in)
  2.     k=-q./L.*log(C_out./C_in);
  3.     Drug=@(d)C_in.*exp(k.*d);
  4.     F=@(x) (-(Kc.*(CD-Drug(x))+1)+((Kc.*(CD-Drug(x))+1).^2+4.*Kc.*Drug(x)).^(1./2))./(2.*Kc.*Drug(x));
  5.     MeanFree=integral(F,0,L)./L;
  6. end
复制代码
我想求该函数在一定C_out范围下(其他参数不变)的结果,该怎么做?
另外我还有一个方程:
  1. Peff=-q*log(C_out/C_in)/(2*pi*r*L)
复制代码

我想求该方程在不同Peff时对应的C_out值,该怎么做?

这两个好像是一个问题。我之前以为将自变量以矩阵的形式输入就会自动得出相应的结果,开来是我想得太简单了。求教各位大佬。
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1650

帖子

354

最佳答案
  • 关注者: 80
发表于 2020-8-25 21:52:44 | 显示全部楼层
仅供参考
  1. CD=1;
  2. Kc=2;
  3. L=3;
  4. q=4;
  5. C_in=6;
  6. r=25;
  7. i=0;
  8. for C_out=1:5
  9.     i=i+1;
  10.     res(i)=calMeanFree(CD,Kc,L,q, C_out, C_in);
  11.     Peff(i)=-q*log(C_out/C_in)/(2*pi*r*L);
  12. end

  13. function [MeanFree]=calMeanFree(CD,Kc,L,q, C_out, C_in)
  14. k=-q./L.*log(C_out./C_in);
  15. Drug=@(d)C_in.*exp(k.*d);
  16. F=@(x) (-(Kc.*(CD-Drug(x))+1)+((Kc.*(CD-Drug(x))+1).^2+4.*Kc.*Drug(x)).^(1./2))./(2.*Kc.*Drug(x));
  17. MeanFree=integral(F,0,L)./L;
  18. end
复制代码
回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


3

主题

8

帖子

0

最佳答案
 楼主| 发表于 2020-8-27 16:17:46 | 显示全部楼层

请问一下,这个可不可以不靠循环的方式解决,总觉得循环的代码太长了
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1650

帖子

354

最佳答案
  • 关注者: 80
发表于 2020-8-27 18:31:46 | 显示全部楼层
可能有,但很抱歉,我不清楚
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

247 麦片

财富积分


50500


1

主题

119

帖子

26

最佳答案
  • 关注者: 1
发表于 2020-8-31 21:34:13 | 显示全部楼层 |此回复为最佳答案
王维_U0cq0 发表于 2020-8-27 16:17
请问一下,这个可不可以不靠循环的方式解决,总觉得循环的代码太长了

CD=1;
Kc=2;
L=3;
q=4;
C_in=6;
r=25;

C_out=1:5;
fun_cal=arrayfun(@(C_out) calMeanFree(CD,Kc,L,q, C_out, C_in) , C_out)   % for 循环更简单易懂


Peff(i)=-q.*log(C_out./C_in)./(2*pi*r*L)    %  ./   .*  就可以了

function [MeanFree]=calMeanFree(CD,Kc,L,q, C_out, C_in)
k=-q./L.*log(C_out./C_in);
Drug=@(d)C_in.*exp(k.*d);
F=@(x) (-(Kc.*(CD-Drug(x))+1)+((Kc.*(CD-Drug(x))+1).^2+4.*Kc.*Drug(x)).^(1./2))./(2.*Kc.*Drug(x));
MeanFree=integral(F,0,L)./L;
end

回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


3

主题

8

帖子

0

最佳答案
 楼主| 发表于 2020-9-1 16:45:55 | 显示全部楼层
20141303 发表于 2020-8-27 18:31
可能有,但很抱歉,我不清楚

好的,谢谢你的回复
回复此楼 已获打赏: 0 积分

举报

新手

16 麦片

财富积分


050


3

主题

8

帖子

0

最佳答案
 楼主| 发表于 2020-9-1 17:02:52 | 显示全部楼层

谢谢大佬帮忙,果然有用!!
另外,我第二个问题本意是如何在已知函数的结果下求自变量的原始值。我试了如下代码:
  1. >>peff=@(C_out) -q.*log(C_out./C_in)./(2*pi*r*L)
  2. >>syms d
  3. >>d=solve(peff(d)==0.0152,d)
  4. >>d=eval(d)

  5. d=1.0011
复制代码

peff=0.0152 是之前在令C_out=1 时计算的结果,这里令peff=0.0152 时算得C_out=1.0011, 与1有些偏差。我还比较了C_out=2的情况,反算之后结果为2.0060。我想问一下计算函数值和求取方程的解是哪一个比较精确,有什么方法可以提高这些操作的精度吗?

另外我还是好奇怎样一次计算多个函数值对应的自变量解。我想到可以用循环语句或是把整个操作再封装在一个arrayfun里,除此以外还有别的方法吗?

谢谢
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表