умножить функции в Matlab - PullRequest
       2

умножить функции в Matlab

1 голос
/ 26 марта 2011

Я пытаюсь решить следующие функции

k=2;
G(1)=292000.0;
G(2)=262000.0;
Ld(1)=0.00396;
Ld(2)=0.0344;
deps=10;
aa=3.7;
ms=0.0;

 for i=1:k
    ms=@(x) ms+(G(i)/Ld(i))*exp(-x./Ld(i))

 end

f=@(x) (exp(x.*2*deps)-exp(-x.*deps))/((aa-3)+(2*exp(x.*deps)+exp(-2*x.*deps)))
g=@(x) ms(x).*f(x)
g(1);

, но я получаю эту ошибку "Неопределенная функция или метод" плюс "для входных аргументов типа 'function_handle'."

надеюсь, кто-нибудьможет помочь мне .. Спасибо

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

Как уже указывал Джонас, проблема в том, что вы воспринимаете ms взаимозаменяемо как числовое значение и дескриптор функции, что невозможно сделать.

На самом деле вам не нужен цикл for для генерации анонимной функции ms. Вы можете создать его в одну строку, используя функцию SUM примерно так:

ms = @(x) sum((G./Ld).*exp(-x./Ld));

Это даст вам окончательный результат g(1) = 0.0199;.

1 голос
/ 26 марта 2011

Проблемные строки:

ms=0.0;

 for i=1:k
    ms=@(x) ms+(G(i)/Ld(i))*exp(-x./Ld(i))

 end

Внутри цикла вы воспринимаете ms как дескриптор функции, а также число, которое не будет работать.

Хотя рекурсивное определение дескриптора функции, скорее всего, не лучший путь, к моему удивлению, это возможно. Таким образом, вы можете написать:

ms = @(x)0; %# initialize 'ms' to nothing
for i=1:k
    ms = @(x) ms(x) +(G(i)/Ld(i))*exp(-x./Ld(i));
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...