ปัญหา Matlab กับการเขียนสมการ

ฉันมีปัญหากับการเขียนสมการ

r = 25, k= 2, R = 50:25:600, DR = 0.5:0.5:4.0

h= r*[1-cos(asin((sqrt(2*R*DR+DR^2))+r*sin(acos(r-k)/r)/r))]-k

แต่ผลที่ได้คือ: h = 1.9118e+001 +1.7545e+002i

ฉันเพิ่งเริ่มต้นด้วย Matlab ขอบคุณ


person user699994    schedule 09.04.2011    source แหล่งที่มา
comment
เมื่อฉันใช้เครื่องคิดเลข ผลลัพธ์ที่ได้คือ 4,56   -  person user699994    schedule 09.04.2011


คำตอบ (3)


สิ่งที่ฉันได้รับจากสิ่งที่คุณเขียนคือความจริง

??? Error using ==> mtimes
Inner matrix dimensions must agree.

ซึ่งถูกต้องเพราะคุณพยายามคูณเวกเตอร์ 2 แถวด้วยกัน คุณช่วยแสดงรหัสจริงที่คุณใช้ให้เราดูได้ไหม

อย่างไรก็ตาม สมมุติว่าต้องจัดการด้วยวิธีใดวิธีหนึ่ง สำหรับฉันดูเหมือนว่าคุณกำลังให้อาหารบางอย่างกับ asin ที่มากกว่า 1 มาก นั่นจะทำให้คุณได้ผลลัพธ์ที่ซับซ้อน สิ่งที่คุณส่งไปให้ asin อาจจะต้องหารด้วย R^2 หรือ DR^2 หรืออะไรทำนองนั้นหรือเปล่า? คุณมีปัญหาที่คล้ายกันในภายหลังด้วยอาร์กิวเมนต์ถึง acos

ฉันยังสงสัยด้วยว่าตัวดำเนินการ * และ ^ และ / บางตัวของคุณควรจะเป็นตัวดำเนินการตามองค์ประกอบ .*, .^, ./

person Gareth McCaughan    schedule 09.04.2011
comment
บางทีคำถามของฉันอาจสับสนเล็กน้อย ด้วยเหตุนี้ฉันจึงต้องได้ตาราง (หรือเมทริกซ์) ดังนั้นในสมการแรกฉันใช้ R= 50, DR = 0.5, r= 25, k=2 และฉันต้องได้ h ในสมการที่สอง ฉันใช้ R=75, DR=1.0, r=25, k=2...สำหรับสมการสุดท้าย ฉันใช้ R=600,DR=4.0,r=25,k=2 - person user699994; 09.04.2011
comment
สิ่งเดียวกันกับ acos(r-k) บางทีคุณอาจหมายถึง acos((r-k)/r) - person Emilio Silva; 09.04.2011

หากคุณกำลังพยายามทำตามที่คุณพูด:

ดังนั้นในสมการแรกฉันใช้ R= 50, DR = 0.5, r= 25, k=2 และฉันต้องได้ h ในสมการที่สอง ฉันใช้ R=75, DR=1.0, r=25, k=2...สำหรับสมการสุดท้าย ฉันใช้ R=600,DR=4.0,r=25,k=2

DR และ R ต้องมีความยาวเท่ากัน... ดังนั้นหาก R ไประหว่าง 50 ถึง 600 โดยเพิ่มขั้นละ 25 ดังนั้น DR ควรเปลี่ยนจาก 0.5 ถึง 12.5 โดยเพิ่มขั้น 0.5 หรือ 0.5 ถึง 4.0 โดยเพิ่มขั้นละ 0.1522...

เมื่อคุณทราบแล้ว ต้องแน่ใจว่าได้เพิ่มจุดก่อนการดำเนินการคูณเมทริกซ์ทุกครั้ง (เช่น * หรือ ^)

person Rasman    schedule 09.04.2011

แก้ไข: ปรับสูตรเล็กน้อย (คร่อม) เพื่อสะท้อนถึงความสำเร็จในความคิดเห็น

เมื่อคุณบอกว่าคุณต้องการตาราง ฉันคิดว่ามันจะเป็นตาราง R คูณ DR (เนื่องจากคุณต้องมีเวกเตอร์ที่มีความยาวต่างกัน) ในการทำเช่นนั้น คุณต้องใช้ R เป็นเวกเตอร์คอลัมน์ (R' ด้านล่าง) และคูณด้วย * (ไม่ใช่ .*) เมื่อ R ไม่ปรากฏในคำใดคำหนึ่งคูณด้วย ones(size(R)) (หรือใช้ repmat) เพื่อให้ DR อยู่ในรูปร่างที่ถูกต้อง หากต้องการยกกำลัง DR ตามองค์ประกอบ คุณต้องมี DR.^2 ดูเหมือนว่าจะมีวงเล็บเหลี่ยมวางผิดตำแหน่งสำหรับ acos คุณต้องหารด้วย r ก่อนรับ acos แน่นอน จะต้องหารด้วย r ใน asin (ไม่ใช่ r^2 เพราะคุณได้นำ sqrt ไปแล้ว) สุดท้าย การหารด้วย r ซ้ำซ้อนกับที่เขียนไว้ เนื่องจากคุณคูณด้วย r ที่ระดับเดิมก่อนหน้านั้น ยังไงก็ตามหากผมทำสิ่งต่อไปนี้:

h= r*(1-cos(asin((sqrt(2*R'*DR+ones(size(R))'*DR.^2)/r)+sin(acos((r-k)/r)))))-k

ฉันได้ตาราง R x DR ผลลัพธ์สำหรับ R,DR ขนาดเล็กนั้นเป็นจริง R,DR ที่สูงกว่านั้นซับซ้อนเนื่องจากอาร์กิวเมนต์ของ asin ตัวแรกคือ >1 รายการแรกในตารางคือ 4.56 ตามที่คุณต้องการ

person Ramashalanka    schedule 09.04.2011
comment
ขอบคุณ ฉันฟังคำแนะนำของคุณ และคอมพิวเตอร์ทีละชิ้น ในที่สุดฉันก็ได้สูตรที่ถูกต้อง ฉันเพิ่งหา r = 25, k = 2, R = 50, DR = 0.5 และรวมอยู่ในสูตรนี้ h= r*[1-cos(asin((sqrt(2*RDR+DR.^2) )/r)+(rsin(acos((r-k)/r))/r)))]-k และผลที่ได้คือ 4.56 - person user699994; 10.04.2011