在MATLAB中改变变量?

时间:2017-05-17 19:32:42

标签: matlab

我定义了几个匿名函数,这些函数通常依赖于三个变量eta1, eta2, yeta1 eta2y

之间存在以下关系
eta1=@(y) ((i*alpha1*lambda_0)^(1/3))*y+eta01;
eta2=@(y) ((i*alpha2*lambda_0)^(1/3))*y+eta02;

所以我基本上为y提供了值,然后我可以通过h1b(y=whatever)绘制arrayfun

DW1=@(eta) blablabla
N3Y=@(y) i*alpha1*(DW1(eta1(y))*conj(U2(eta2(y)))+W1(eta1(y))...
    *conj(DU2(eta2(y))));
h1b=@(y) -(1/(lambda_0*alphats))*(betats*N3Y(y));

vec=arrayfun(h1b,eta1(0:0.01:N));
plot(abs(vec),0:0.01:N)

我的问题:有没有办法根据eta1而不是y正式检索h1b,作为匿名函数?不评估y,后来eta1,eta2再评估h1b,这就是我的工作。

1 个答案:

答案 0 :(得分:0)

让我们澄清一下。所以你现在有:

syms y eta1 eta2;
eta1(y), eta2(y)
W1(eta1), DW1(eta1)
U2(eta2) DU2(eta2)

因此你也有:

N3Y(W1,DW1,U2,DW2) 

或:

N3Y(eta1,eta2)

或:

N3Y(y)

因此,你有:

h1b(N3Y)

或:

h1b(eta1,eta2)

或:

 h1b(y) 

所以,h1b完全取决于eta1eta2,所以如果你想要操纵变态evalsimplify来电,为什么你不这样做?创建两个版本的函数,一个版本为y,另一个版本为eta

您无需重写,y版本只是eval版本的eta