Info
Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.
index must be a positive integer or logical
this is part of my code with SPEED=8 ASPECT=30
DOPPLER = 2925/(2925 + SPEED*cos(ASPECT)); TONE_A=88*DOPPLER; atten(TONE_A)=( 0.1*TONE_A^2/(1+TONE_A^2))+(40*TONE_A^2/(4.100+TONE_A^2))+(2.75*(10^-4)*TONE_A^2)+0.003;
i get Attempted to access atten(87.9768); index must be a positive integer or logical.
what is the problem ?
1 Kommentar
Antworten (1)
You first need to define ‘atten’ as a function if you want to call it as one:
atten = @(TONE_A) ( 0.1*TONE_A^2./(1+TONE_A^2))+(40*TONE_A^2./(4.100+TONE_A^2))+(2.75*(10^-4)*TONE_A^2)+0.003; % Anonymous Function ‘atten’ atten_TONE_A = atten(TONE_A); % Call ‘atten’ & Assign Output To A Variable
3 Kommentare
atten = @(TONE) ( 0.1 * TONE^2 ./ (1+TONE.^2)) + (40 * TONE.^2 ./ (4.100 + TONE.^2)) + (2.75 * (10^(-4)) * TONE.^2) + 0.003; % Anonymous Function ‘atten’ atten_TONE_A = atten(TONE_A); atten_TONE_B = atten(TONE_B);
No. You define a single function for a TONE
atten = atten = @(TONE) ( 0.1*TONE.^2./(1+TONE.^2))+(40*TONE.^2./(4.100+TONE.^2))+(2.75*(10^-4)*TONE.^2)+0.003; % Anonymous Function ‘atten’
And call it with different arguments
TONE_A = 88*DOPPLER; AA = atten(TONE_A); TONE_B = 123*DOPPLER: % or whatever TONE_B you have AB = atten(TONE_B);
If you have many TONEs, this scheme will be cumbersome and you can call atten with a vector of all your TONEs
A = atten([TONE_A TONE_B TONE_C])
Note that I have changed Star Strider's function to use point-wise operations .^ such that it can handle multiple inputs.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!