如何解决错误“没有足够的输入参数”。

493(30天)
如何解决错误“没有足够的输入参数”。
我有保存文件作为fick.m
函数dydt =菲克(t、C、V,霁,我,J2i, J2e,达峰时间,Cinit)
dydt = (Ji (t, C)有人(t、C) + J2i (t, C) -J2e (t、C)) / V;
结束
以下文件作为practical.m
% %区划的一个模型
清晰的所有
clf%注释掉,如果你想使用增量工具
%设置参数值
V = 500;%公升水
Cin = 0.2;%毫克每升化学水
气= 50;每天%升水
量化宽松政策=气;% =体积流率
Cinit = 0;%没有化学槽在时刻0
达峰时间= 30;%的时间范围来解决模型(天)
%解决微分方程
索尔=数值(Cinit @Fick,[0达峰时间],[],V,霁,我,J2i, J2e);
tstep = 0.01;
tspan = 0: tstep:最高温度;
y =德瓦尔(溶胶,tspan);
情节(tspan, y)
包含(的时间(天));
ylabel (的浓度(毫克/升));
*但我得到以下错误. . *
错误使用菲克(第2行)
足够的输入参数。
3评论
乌萨马•希马尼(Madipelli
unit_step
没有足够的输入参数。
错误在unit_step(4号线)
len =长度(t);

登录置评。

接受的答案

本杰明·克劳斯
本杰明·克劳斯 2016年2月12日
当您传递一个函数处理数值,数值只会提供前两个输入参数(t、y)。如果你想提供额外的输入参数,你需要使用一个匿名函数。
你可以把这条线:
索尔=数值(Cinit @Fick,[0达峰时间],[],V,霁,我,J2i, J2e);
是这样的:
CallFick = @ (t、C)菲克(t、C、V,霁,我,J2i, J2e,达峰时间,Cinit);
索尔=数值([0达峰时间],CallFick Cinit);
注意:我不完全确定' C '是你的因变量,或使用“Cinit”,那么你可能需要调整这个语法有点让它做你想做的事情,但这是一般的想法。
你可以找到更多的细节 参数化功能 下医生页面标题“使用匿名函数参数化”。
4评论
本杰明·克劳斯
本杰明·克劳斯 2016年5月9日
我知道一段时间已经过去了,但如果你还没有得到这个工作,这是歌唱的基本代码来解决。
首先定义一个函数进入ODE求解器进行求解。第一个输入“t”,但是你不需要“t”,所以它将被忽略。
函数dCdt =菲克(~ C气,Ci,量化宽松,摩根大通,Jm, V)
dCdt =(气。* Ci-Qe。* C + Jp-Jm)。/ V;
结束
一旦你的函数,您可以创建这样一个脚本:
Ci = 0.2;
C0 = 0;
气= 50;
量化宽松政策=气;
摩根大通= 1;
Jm = 1;
V = 500;
达峰时间= 30;
[t、C] =数值(@ (t, C)菲克(t、C、气、Ci、量化宽松,摩根大通,Jm, V),[0达峰时间],C0);
情节(t, C)
注意:函数传递到ODE求解器实际上是一个匿名函数,只需要“t”和“C”作为输入,然后调用菲克并提供其余的输入。

登录置评。

更多的答案(3)

成员mukul chankaya
成员mukul chankaya 2020年10月8日
嗨,大家一天好我也变得“没有足够的输入参数”在运行
功能成本= optim_pi (k) Assignin(“基地,“k”, k);sim(仿真模型的名字);成本=伊势(长度(ISE));最终伊势积分平方误差由GA优化请回复

Chapat
Chapat 2020年3月11日
你好!我新在Matlab中,我有一个问题在运行此代码函数refraction_2layers(第18行)和第25行错误消息输入参数是不够的

Chapat
Chapat 2020年3月11日
函数refraction_2layers (v1、v2, z, FIRST_ARRIVALS_ONLY);
% refraction_2layers (v1、v2, z);% %为两层系统创造了旅行时间的情节1层速度% v1和v2和层厚度z % FIRST_ARRIVALS_ONLY国旗可能设置为1的情节只有第一个到达。%的违约,所有移民都绘制。
如果输入参数个数< 4 FIRST_ARRIVALS_ONLY = 0;检波器接收结束% %的坐标(m,相对于源)x = [0:5:300];
% % % %直接波沿地面传播速度(v1) t1 = x / v1;
% %头波沿着z1-z2边界% % % %折射旅行时间取决于两层% %速度和厚度的层1只(2层的厚度无关)
t2 = (2 * z *√v2 ^ 2 v1 ^ 2) / (v1 * v2)) + x / v2;% %注意边坡应该1 / v2 !
xcrit z = 2 * * v1 / (√(v2 ^ 2 v1 ^ 2));如果伊斯雷尔(xcrit) = min(找到(x > xcrit));结束
交叉= ((2 * z *√(v2 ^ 2 v1 ^ 2)) / (v1 * v2)) / (1 / v1-1 / v2);
b = max(找到(x < =交叉));
如果FIRST_ARRIVALS_ONLY情节(x (1: b), t1 (1: b) * 1000,“。”)坚持如果伊斯雷尔(t2)情节(x (b:结束),t2 * 1000 (b:结束),r -)结束其他情节(x, t1 * 1000,“。”)坚持如果伊斯雷尔(t2)情节(x(结束),t2(结束)* 1000,r -)结束
包含(“检波器抵消(m)”)
ylabel (“时间(ms)”)
网格
传奇(“直接波”,“头波”)
标题([“z1 = 'num2str (z),“米;v1 = 'num2str (v1),米/秒;v2 = 'num2str (v2),“米/秒”])
轴(300 0 300 [0])
持有
这是计划在18 - 25行我有不够的输入参数错误

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!