/ / Передача однієї змінної з двох змінних, визначених для функції в MATLAB - matlab, matrix, symbolic-math

Передача однієї змінної двох змінних, визначених для функції в MATLAB - matlab, matrix, symbolic-math

У мене є така функція в MATLAB:

f(x,A) = @(x,A) x"*A*x

де A є n-by-n матриця і x є n-by-1 вектор. Чи можливо, що я проходжу лише A у функцію як масив реалів, і залишити x як символічний? Іншими словами, я не хочу вводити елементи A в f(x) = @(x) ... і хочете мати можливість змінювати значення A, сказати в циклі.

Відповіді:

2 для відповіді № 1

Це можна зробити так:

>> n = 3;
>> x = sym("x", [n 1]); %// define x as a symbolic n-by-1 vector
>> f = @(x,A) x"*A*x; %"// define function f

>> A = [1 2 3; 4 5 6; 7 8 9]; %// define an n-by-n matrix A
>> f(x,A)
ans =
x1*(conj(x1) + 4*conj(x2) + 7*conj(x3)) + x2*(2*conj(x1) + 5*conj(x2) + 8*conj(x3)) + x3*(3*conj(x1) + 6*conj(x2) + 9*conj(x3))

>> A = [5 6 7; 8 9 10; 10 11 12]; %// now try a different n-by-n matrix A
>> f(x,A)
ans =
x1*(5*conj(x1) + 8*conj(x2) + 10*conj(x3)) + x2*(6*conj(x1) + 9*conj(x2) + 11*conj(x3)) + x3*(7*conj(x1) + 10*conj(x2) + 12*conj(x3))

1 для відповіді № 2

Я зараз не знаю, якщо я вас цілком зрозумів, але що робити з переосмисленням f при кожній ітерації циклу?

X = [1 2 1 3 1];

for t = 1:5
A = rand(5);
f = @(x)(x"*A*x);
disp(f(X));
end