как интегрировать функцию с множеством аргументов, использующую matlab - PullRequest
0 голосов
/ 18 марта 2012

Если я хочу интегрировать функцию

y = - ((F + h) M ^ 3 (cosh (h * M) + M * beta * sinh (h)* M))) / (h * M * cosh (h * M) + (- 1 + h * M ^ 2 * beta) * sinh (h * M)) - - (альфа * (M ^ 2 * (F +)h) * (- 1 + 2 * h ^ 2 * M ^ 2 + cosh (2 * h * M) -2 * h * M * sinh (2 * h * M))) / (8 * (h * M)* cosh (h * M) + (- 1 + h * M ^ 2 * beta) * sinh (h * M)) ^ 2));

относительно x, где

phi = 0.6;
x = 0.5;
M = 2;
theta = -1:0.5:1.5;
F = theta - 1;
h = 1 + phi*cos(2*pi*x);
alpha = 0.2;beta = 0.0;

Я написал Mfile

function r = parameterIntegrate(F,h,M,beta,alpha,theta,phi)
% defining a nested function that uses one variable
phi = 0.6;
x = 0.5;
r = quad(@testf,0,1 + phi*cos(2*pi*x));
% simpson's rule from 0 to h
function y = testf(x)
h = 1 + phi*cos(2*pi*x);
theta = -1:0.5:1.5;
F = theta - 1;
M = 2;
beta = 0;
alpha = 0;
y = -((F+h)*M^3*(cosh(h*M)+M*beta*sinh(h*M)))/(h*M*cosh(h*M)+(-1+h*M^2*beta)*sinh(h*M))- (alpha*(M^2*(F+h)*(-1+2*h^2*M^2+ cosh(2*h*M)-2*h*M*sinh(2*h*M)))/(8*(h*M*cosh(h*M)+(-1+h*M^2*beta)*sinh(h*M))^2));
end
end

и вызвал функцию

tol = [1e-5 1e-3];
q = quad(@parameterIntegrate, 0, h,tol)
or
q = quad(@parameterIntegrate, 0,1 + phi*cos(2*pi*0.5),tol)

, она не работает, она дает мне

Error using ==> plus
Matrix dimensions must agree.

1 Ответ

0 голосов
/ 18 марта 2012

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

  1. Выяснить, какая именно строка кода вызывает проблему.
  2. Если в строке содержится большое количество переменных, упростите ихsome.
  3. Помните, что если вообще есть какие-либо матрицы, и вы не хотите выполнять умножение / деление матриц, используйте .*, ./ и .^.

Я подозреваю, что если вы измените свои умножения / деления с шагом 3, ваша проблема исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...