필터 지우기
필터 지우기

I I'm new to matlab and Ikeep getting "Index in position 1 is invalid. Array indices must be positive integers or logical values. Error in "THRUST CURVE FUNCTION LINE 3"

조회 수: 3 (최근 30일)
I I'm new to matlab and Ikeep getting "Index in position 1 is invalid. Array indices must be positive integers or logical values. Error in "THRUST CURVE FUNCTION LINE 3"
function output_value = thrust_curve_function(t)
thrust_curve_values = readmatrix('thrust_curve_data.csv');
thrust_curve_t_values = thrust_curve_values(0.01 , 0.5 , 0.1 , 2 , 2.2 , 2.45 , 2.72);
thrust_curve_f_values = thrust_curve_values(50 , 56 , .48 , 24 , 19 , 5 , 0);
output_value = interp1(thrust_curve_t_values,thrust_curve_f_values,t);
end
  댓글 수: 4
Ryan
Ryan 2023년 10월 23일
forgot to post second part of code
start_t_value = 0;
end_t_value = 2.75;
integral@thrust_curve_function(thrust_curve_function), start_t_value, end_t_value;
Walter Roberson
Walter Roberson 2023년 10월 24일
thrust_curve_f_values = thrust_curve_values(50 , 56 , .48 , 24 , 19 , 5 , 0);
Should that be 48 instead of .48 ?

댓글을 달려면 로그인하십시오.

답변 (2개)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023년 10월 23일
From your post, what I understood is that you're trying to make linear interpolation of the imported data. I am not 100% sure if this is the case or not :). Anyhow, if this is what I guessed, here is a simple example code how to solve this exercise, e.g.:
FName = 'F_time.csv'; % This is a data file name. The data will be read from this file
t = 0:.1:2.75; % Input variable t values to be used for interp1()
% NOTE: Input and output variable names can be altered
[thrust_curve_values, output_value] = thrust_curve_function(t, FName);
plot(thrust_curve_values(:,1), thrust_curve_values(:,2), 'ro'), hold on
plot(t, output_value, 'k-')
legend('thrust_curve_values', 'inperpolated values')
xlabel('t')
ylabel('Output')
grid on
function [thrust_curve_values, output_value] = thrust_curve_function(t, FName)
thrust_curve_values = readmatrix(FName);
t_values = thrust_curve_values(:,1); % Column 1 of the imported data is t
F_values = thrust_curve_values(:,2); % Column 2 of the imported data is F(t)
output_value = interp1(t_values,F_values,t);
end
All the best
  댓글 수: 2
Ryan
Ryan 2023년 10월 23일
Your right about what I'm trying to do, but I'm still getting errors sadly
Sulaymon Eshkabilov
Sulaymon Eshkabilov 2023년 10월 24일
Your error on Line 3 is linked with the index values that must be integers, e.g. 1, 2, 3, ...
Here is a demo example with error on Line 3:
t = 0:.1:2.75; % Input variable t values to be used for interp1()
[thrust_curve_values, output_value] = thrust_curve_function(t)
function [thrust_curve_values, output_value] = thrust_curve_function(t)
thrust_curve_values = readmatrix('DATA_file.csv');
t_values = thrust_curve_values(0.01 , 0.5 , 0.1 , 2 , 2.2 , 2.45 , 2.72); % Index related error
F_values = thrust_curve_values(:,2); % Column 2 of the imported data is F(t)
output_value = interp1(t_values,F_values,t);
end
Here is a demo example with the fixed index related error on Line 3, etc. Note that we are finding the indexes by using logical index operations - see IDX1 and IDX2
t = 0:.1:2.75; % Input variable t values to be used for interp1()
[thrust_curve_values, output_value] = thrust_curve_function(t)
function [thrust_curve_values, output_value] = thrust_curve_function(t)
thrust_curve_values = readmatrix('DATA_file.csv');
% Note here how indexes are found with respect to the logic condition values.
% % Index related error fixed
IDX1=find(thrust_curve_values(:,1)==0.01 | thrust_curve_values(:,1)==0.5...
| thrust_curve_values(:,1)==0.1 | thrust_curve_values(:,1)==2 | thrust_curve_values(:,1)==2.2 ...
|thrust_curve_values(:,1)==2.45 | thrust_curve_values(:,1)==2.72);
% See the values of IDX1
disp(IDX1)
t_values = thrust_curve_values(IDX1,1); % Index related error fixed
% Note here how indexes are found with respect to the logic condition values.
% % Index related error fixed
IDX2=find(thrust_curve_values(:,2)==50 | thrust_curve_values(:,2)==56 ...
| thrust_curve_values(:,2)==48 | thrust_curve_values(:,2)==24 | thrust_curve_values(:,1)==19 ...
|thrust_curve_values(:,2)==5 | thrust_curve_values(:,2)==0); % Index related error fixed
F_values = thrust_curve_values(IDX2,2); % Column 2 of the imported data is F(t)
output_value = interp1(t_values,F_values,t);
end
Note that IDX1 need to be sufficient for your planned data take out. Presumable t vs. F(t) from your imported data. because t is independent variable and F(t) is a dependent. Unless you have some special conditions for F(t).

댓글을 달려면 로그인하십시오.


Walter Roberson
Walter Roberson 2023년 10월 24일
You should not be using integral for that kind of situation.
You have a table of numeric values, and you are trying to integrate that table. Unless you have an additional thrust model then the best you can justify is to use trapz or cumtrapz
In order to go beyond that you would need to have a function that models the transition between the points.
For example you might choose to interpolate a polynomial of degree 6 over your 7 points, and then proceed to integrate that polynomial of degree 6. This would probably not be a good idea, but it is an example of one way to model the data. Another way would be to use a cubic spline interpolation.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by