ฉันจะรวมฟังก์ชันที่มีข้อโต้แย้งมากมายโดยใช้ Matlab ได้อย่างไร

ถ้าผมจะอินทิเกรตฟังก์ชัน

y = -((F+h)M^3(cosh(h*M)+M*beta*sinh(h*M)))/(h*M*cosh(h*M )+(-1+h*M^2*เบต้า)*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*เบต้า)*ซินห์(ซ*ม))^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.

person sani    schedule 17.03.2012    source แหล่งที่มา


คำตอบ (1)


ข้อความแสดงข้อผิดพลาดของคุณหมายถึงว่าสำหรับโค้ดบางบรรทัด มีเมทริกซ์ 2 ตัว แต่ขนาดไม่ตรงกัน จึงไม่สามารถเพิ่มเข้าไปได้ สิ่งที่ฉันแนะนำให้คุณทำเพื่อแก้ไขปัญหานี้มีดังนี้:

  1. ค้นหาให้แน่ชัดว่าโค้ดบรรทัดใดที่ทำให้เกิดปัญหา
  2. หากบรรทัดมีตัวแปรจำนวนมาก ให้ลดความซับซ้อนลงบางส่วน
  3. จำไว้ว่าหากมีเมทริกซ์ใดๆ เลย และคุณไม่ต้องการคูณ/หารเมทริกซ์ ให้ใช้ .*, ./ และ .^

ฉันสงสัยว่าถ้าคุณเปลี่ยนการคูณ/หารด้วยขั้นตอนที่ 3 ปัญหาของคุณก็จะหมดไป

person PearsonArtPhoto    schedule 17.03.2012
comment
ขอบคุณ. ฉันลองขั้นตอนที่ 3 ฉันยังคงได้รับข้อความเดิม ฉันจะลองตรวจสอบโค้ดแต่ละบรรทัด - person sani; 18.03.2012