String 有没有一种方法可以组合多个函数进行绘图,而不用在MATLAB中重新键入它们?

String 有没有一种方法可以组合多个函数进行绘图,而不用在MATLAB中重新键入它们?,string,matlab,typeconverter,function-handle,String,Matlab,Typeconverter,Function Handle,在我目前所学的课程中,有大量的密谋活动正在进行。为了加快速度,我开始使用fplot而不是plot。现在我想知道是否有一种方法可以将两个函数组合在一起而不必重新键入它们 大概是这样的: t = @(x) x; w = @(x) x; d = @(x) t + w; fplot(d,[-1,1]); Cl = @(a) Cn * cos(a) - Ca * sin(a) Cd = @(a) Cn * sin(a) + Ca * cos(a) ld = @(a) Cl / Cd f1 = @(

在我目前所学的课程中,有大量的密谋活动正在进行。为了加快速度,我开始使用fplot而不是plot。现在我想知道是否有一种方法可以将两个函数组合在一起而不必重新键入它们

大概是这样的:

t = @(x) x;
w = @(x) x;

d = @(x) t + w;
fplot(d,[-1,1]);
Cl = @(a) Cn * cos(a) - Ca * sin(a)
Cd = @(a) Cn * sin(a) + Ca * cos(a)

ld = @(a) Cl / Cd
f1 = @(x)(x.^2 + x.^3);
f2 = @(x)(2 * x.^2 + 5 * x);
x = linspace(-1,1,100);
y1 = feval(f1,x) + feval(f2,x);
y2 = feval(f1,x) ./ feval(f2,x);
plot(x,y1,'r',x,y2,'b')
这样做的能力将允许更容易的调试和编辑,并节省大量的编码时间

我的一个想法是使用字符串来携带函数

i、 e

但我还没有找到一种方法将其更改回(除了相应的ASCII值)

我想另一种方法是使用省略号并将线条分开以便于查看,但这并不能解决核心问题

如果你想要更多的背景知识或理解:下面是我们必须绘制的一些函数的示例

Cn = @(a) (1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a);
Ca = @(a) ((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2);

Cl = @(a) ((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * cos(a) - (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2))*sin(a);
Cd = @(a) ((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * sin(a) + (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2)) * cos(a);

ld = @(a) (((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * cos(a) - (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2))*sin(a)) / (((1 - (rn/rc)^2*cos(dc)^2)*cos(dc)^2*sin(2*a)) * sin(a) + (((1 - sin(dc)^4) * (rn/rc)^2) + (2 * sin(dc)^2 * cos(a)^2 + cos(dc)^2 * sin(a)^2) * (1 - (rn/rc)^2 * cos(dc)^2)) * cos(a));
这些方程中有很多是我们在家庭作业中推导出来的,所以如果我们在推导一个函数时出错,我们必须重写所有的函数。在这个例子中,我们得到了Cn和Cl(使用Cn和Ca),但我们必须自己推导Ca和Cd。“ld”只是cl除以cd

简化后,它们可能如下所示:

t = @(x) x;
w = @(x) x;

d = @(x) t + w;
fplot(d,[-1,1]);
Cl = @(a) Cn * cos(a) - Ca * sin(a)
Cd = @(a) Cn * sin(a) + Ca * cos(a)

ld = @(a) Cl / Cd
f1 = @(x)(x.^2 + x.^3);
f2 = @(x)(2 * x.^2 + 5 * x);
x = linspace(-1,1,100);
y1 = feval(f1,x) + feval(f2,x);
y2 = feval(f1,x) ./ feval(f2,x);
plot(x,y1,'r',x,y2,'b')

我在这个网站上得到了很多帮助来寻找答案,但我找不到其他人问这个问题或类似的问题。如果你知道另一篇文章对此有一个解决方案,我很乐意先读一读。希望你能帮忙

t
in
t=@(x)x
是句柄,显然不能对句柄执行诸如
+-/*
之类的操作

我会这样做:

t = @(x) x;
w = @(x) x;

d = @(x) t + w;
fplot(d,[-1,1]);
Cl = @(a) Cn * cos(a) - Ca * sin(a)
Cd = @(a) Cn * sin(a) + Ca * cos(a)

ld = @(a) Cl / Cd
f1 = @(x)(x.^2 + x.^3);
f2 = @(x)(2 * x.^2 + 5 * x);
x = linspace(-1,1,100);
y1 = feval(f1,x) + feval(f2,x);
y2 = feval(f1,x) ./ feval(f2,x);
plot(x,y1,'r',x,y2,'b')

即使我得到了“明显的船长”的绰号,我也要说明组成函数句柄的简单方法。:-)

这一呼吁再次显而易见:

ld(3);
ld([1,2;3,4]);

t
in
t=@(x)x
是一个句柄,显然不能对句柄执行诸如
+-/*
之类的操作。是的,这是正确的做法。船长的分数显而易见;)对非常感谢你!将变量重新插入函数是一个很好的解决方案。能够插入矩阵在课程的后期可能会证明是有价值的,所以我非常感谢您提醒我关于矩阵的格式。是的,你认为其他的都是标量是正确的。再次感谢你!