ข้อผิดพลาดระดับแปดเสียง: ดัชนีตัวห้อยต้องเป็นจำนวนเต็มบวกหรือตรรกะ

ฉันกำลังพยายามหาผลรวมของเวกเตอร์ที่จัดทำดัชนีและเมทริกซ์ที่จัดทำดัชนีดังนี้:

k=[0:1:N-1]  
n=[0:1:N-1]  
x_n = sin(pi*n)  
N = size(x_n,2)  
_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1)  

แต่ฉันได้รับข้อผิดพลาด:

error: subscript indices must be either positive integers or logicals  

ฉันพลาดอะไรไปที่นี่?

แก้ไข: ฉันเพิ่งรู้ว่าฉันพลาดฟังก์ชัน _plus เพื่อรวมลำดับที่สร้างขึ้น มันควรมีลักษณะเช่นนี้:

k=[0:1:N-1]  
n=[0:1:N-1]  
x_n = sin(pi*n)  
N = size(x_n,2)  
_plus(_seqgen(x_n(n)*exp(k*n/N), n, 0..N-1))  

ฉันยังคงได้รับข้อผิดพลาดเดียวกันแม้ว่า ...


person Cesar    schedule 08.03.2013    source แหล่งที่มา
comment
ฉันลืมบอกไปว่าฉันเพิ่งเริ่มใช้ Matlab/Octave ฉันค้นหาวิธีต่างๆ ทางออนไลน์ในการทำเช่นนี้ แต่ฉันแค่นิ่งงัน   -  person Cesar    schedule 09.03.2013


คำตอบ (2)


ข้อความแสดงข้อผิดพลาดอธิบายว่ามีอะไรผิดปกติ: คุณกำลังพยายามสร้างดัชนีอาร์เรย์ด้วยตัวเลขที่ไม่ใช่จำนวนเต็มบวกหรือตรรกะ การจัดทำดัชนีอาร์เรย์เดียวในโค้ดของคุณคือ x_n(n) และแน่นอน บรรทัด n=[0:1:N-1] แสดงว่าดัชนี n ไม่ใช่ค่าบวก เนื่องจาก 0 ไม่ใช่จำนวนบวก บทเรียน: MATLAB/Octave จัดทำดัชนีจาก 1 เสมอ ฉันขอแนะนำให้คุณใช้บทช่วยสอนจริงบางบท เนื่องจากนี่คือเรื่องพื้นฐานที่คุณจำเป็นต้องรู้

person devrobf    schedule 08.03.2013
comment
ในการป้องกัน users @ user2150186 ข้อผิดพลาดจะดูเหมือนมีบางอย่างผิดปกติโดยพื้นฐานกับประเภท (หรือคลาส) ของนิพจน์การจัดทำดัชนีในตัวเอง ข้อความกว้างเกินไป เนื่องจากปัญหาคือ หนึ่ง ค่าเดียว ไม่ถูกต้อง ค่า ที่ใช้เป็นตัวห้อย ศูนย์ไม่ใช่ดัชนีที่ถูกต้องจะดีกว่า IMO มาก - person user7610; 10.10.2013

ให้ฉันเสนอคำวิจารณ์เกี่ยวกับรหัสของคุณ - เนื่องจากคุณยอมรับว่าคุณเป็นมือใหม่ในเรื่องนี้ ขั้นแรกให้คุณสร้างเวกเตอร์

n = [0:1:N-1];

ซึ่งบังเอิญไม่จำเป็นต้องใช้วงเล็บเหลี่ยมและสามารถเขียนเป็นได้

n = 0:N-1;

จากนั้นคุณสร้างเวกเตอร์ x_n ซึ่งสำหรับค่าที่กำหนดจะเป็นศูนย์ทั้งหมด (sin(pi*n)==0 สำหรับค่าจำนวนเต็ม n)

ถัดไป คุณทำอะไรแปลกๆ ดูเหมือนว่าคุณกำลังสร้างลำดับเชิงสัญลักษณ์ โดยวนซ้ำตัวแปร n ซึ่งดูเหมือนอาร์เรย์ n ที่คุณกำหนดไว้ก่อนหน้านี้มาก ไม่แน่ใจว่าจะทำอย่างไร - ดูเหมือนจะไม่ใช่ความคิดที่ดี โปรดสังเกตว่าแม้แต่ @jazzbassrob ยังสับสนกับสิ่งนี้ - ความจริงที่ว่าคุณได้รับข้อผิดพลาด "ไม่สามารถสร้างดัชนีด้วยศูนย์" ไม่ใช่เพราะค่าของเวกเตอร์ n ของคุณ แต่เป็นเพราะคุณวนซ้ำจาก 0..N-1 ในคำสั่ง _seqgen (ไม่ใช่ สิ่งเดียวกันแม้ว่าจะเกิดขึ้นเป็นค่าเดียวกันก็ตาม)

ในนิพจน์ _seqgen นั้น ฉันเห็น exp(k*n/N) ซึ่งใช้งานได้เพราะในบริบทนี้ n เป็นตัวแปรที่กำลังก้าวผ่าน 0..N-1 - หาก Matlab ดูคำจำกัดความก่อนหน้าของ n มันจะเกิดข้อผิดพลาดอีกครั้งเนื่องจากขนาดไม่ตรงกัน (เนื่องจาก * เป็นเมทริกซ์ ตัวดำเนินการคูณและคาดว่ามิติที่สองขององค์ประกอบแรกจะเป็น = มิติแรกขององค์ประกอบที่สอง)

วิธีที่เป็นมาตรฐานมากขึ้นในการทำสิ่งที่คุณพยายามทำคือ

mySum = sum(x_n.*exp(k.*n/N));

นี่เป็นการคูณพจน์ใน x_n และ exp แบบอิลิเมนต์ต่ออิลิเมนต์ของผลคูณอิลิเมนต์ต่ออิลิเมนต์ของ k และ n หารด้วย N

หมายเหตุ - สิ่งนี้จะ "ดีกว่า" จริงหรือไม่นั้นขึ้นอยู่กับสิ่งที่คุณต้องการจะทำอย่างไรกับผลลัพธ์ (การประเมินข้างต้น)

person Floris    schedule 09.03.2013