2014-01-02 2 views
0

Я хочу напечатать эту функцию:Более эффективные альтернативы Eval функции в MATLAB (или, как печатать в 3D без предварительной оценки)

f=cos(q1+q2) 

я установить диапазон как q1 и q2, как это:

q1=-pi:0.01:pi 
q1=-pi:0.01:pi 

затем, чтобы использовать сетку (это не то, что мне нравится эта функция, это только один я нашел) я должен:

1) создать meshgrid для й и у 2) создать матрицу для мой fc ontaining его значения для meshgrid так

[X,Y]=meshgrid(x,y) 

сейчас, для 2) если я

for i=1:length(x), 
for j=1:length(y), 
    Z(i,j)=cos(x(i)+y(j)); 
end; 
end; 

, а затем сетки (X, Y, Z) она хорошо работает

НО

если я

for i=1:length(x), 
for j=1:length(y), 
    Z(i,j)=eval(subs(f,[q1,q2],[x(i),y(j)])); 
end; 
end; 

Требуется полчаса (буквально), чтобы получить Z, и я получаю это ужасно (у меня есть такие элементы, как cos (1194939423423424/4214242444122)

Я видел кого-то, использующего такую ​​форму k = a, bf, но я не могу найти его в документации, и я полагаю, это то же самое в команде subs. Почему второй случай медленнее? Я хочу создать функцию, которая делает это взятием f в качестве входного сигнала, но если мне придется жестко кодировать его, потому что я не могу.

Я абсолютно нормально, если вы можете наклонить мне способ печати в 3d и получить кривые уровня без использования тех матрицы, но если вы можете ответить на мой вопрос, который я бы предпочел

+0

Вам не нужно символическая, ни 'Eval()'. Однако я подозреваю, что вы не сформулировали вопрос надлежащим образом. Ниже приводится серфинг: '[q1, q2] = deal (-pi: 0.1: pi); [q1, q2] = meshgrid (q1, q2) surf (q1, q2, q1 + q2) ' – Oleg

ответ

0

Причина, по которой требуется навсегда для вычисления Z заключается в том, что вы не предопределяете массив.

Если f можно векторизации, вы можете создать свой сюжет очень легко:

[X,Y] = meshgrid(-pi:0.01:pi,-pi:0.01:pi); 
f = @(x,y)cos(x+y); 
Z = f(X,Y); %# or call directly Z=cos(X+Y) 

mesh(X,Y,Z) 
+0

Не могли бы вы рассказать мне, что именно @ (x, y) cos (x + y); означает? – user3149593

+0

@ user3149593: '@ (x, y)' - анонимная (или лямбда-функция) с двумя входными аргументами, которые внутренне будут называться 'x' и' y'. 'cos (x + y)' - это то, что будет выполняться при вызове анонимной функции. – Jonas

+0

oh Я вижу, это как makea .m файл с входными аргументами x и y и out = cos (x + y). очень много – user3149593

 Смежные вопросы

  • Нет связанных вопросов^_^