MATLAB Answers

I am trying to test a part of my code but it shows me this message ! how can i solve it , Help plz !

1 view (last 30 days)
Sura Hatem Basir Al-Ani
Sura Hatem Basir Al-Ani on 5 Mar 2021
Commented: Walter Roberson on 5 Mar 2021
I am trying to test a part of my code but it shows me this message ! how can i solve it , Help plz !
Cannot find an exact (case-sensitive) match for 'Material'
The closest match is: material in D:\toolbox\matlab\graph3d\material.m
  2 Comments
Sura Hatem Basir Al-Ani
Sura Hatem Basir Al-Ani on 5 Mar 2021
%Initialisation---------------------------------------
clc;clear;format short g;format compact;
%-------------------------------------------------
%file name: Mat_Data
%thickness and cost factor
%INPUTS-1: search parameters
material(1).Sy=170; material(1).t=[2,4,6,8,10,20,30]; material(1).CF=1.00;
material(2).Sy=280; material(2).t=[1,2,3,4,6,8,10,12,14,16,18,20]; material(2).CF=1.37;
material(3).Sy=180; material(3).t=[2,4,6,8,10,20]; material(3).CF=0.88;
material(4).Sy=300; material(4).t=[2,4,6,8,10,20]; material(4).CF=1.47;
material(5).Sy=190; material(5).t=[2,4,6,8,10,20]; material(5).CF=0.93;
material(6).Sy=320; material(6).t=[2,4,6,8,10,20]; material(6).CF=1.57;
material(7).Sy=220; material(7).t=[2,4,6,8,10,20]; material(7).CF=1.08;
material(8).Sy=370; material(8).t=[1,2,3,4,6,7,8,9,10,12,14,16]; material(8).CF=1.81;
material(9).Sy=210; material(9).t=[2,4,6,8,10,14,16,20,30,40]; material(9).CF=1.03;
material(10).Sy=390; material(10).t=[1,2,3,4,6,8,10,12,14,16,18,20]; material(10).CF=1.91;
material(11).Sy=260; material(11).t=[ 2,4,6,8,10,12,16,20,30,40,50]; material(11).CF=1.27;
material(12).Sy=440; material(12).t=[2,4,6,8,10]; material(12).CF=2.16;
material(13).Sy=270; material(13).t=[1,2,3,4,5,6,7,8,9,10]; material(13).CF=1.32;
material(14).Sy=460; material(14).t=[1,2,3,4,5,6,7,8,9,10]; material(14).CF=2.25;
material(15).Sy=290; material(15).t=[2,4,6,8,10,12,18,20,30]; material(15).CF=1.42;
material(16).Sy=490; material(16).t=[1,2,3,4,5,6,7,8,9,10]; material(16).CF=2.40;
material(17).Sy=310; material(17).t=[1,2,3,4,5,6,7,8,9,10]; material(17).CF=1.52;
material(18).Sy=530; material(18).t=[10,20,30]; material(18).CF=2.60;
material(19).Sy=340; material(19).t=[4,5,8,14,20]; material(19).CF=1.67;
material(20).Sy=580; material(20).t=[2,4,6,8,10]; material(20).CF=2.84;
material(21).Sy=370; material(21).t=[2,4,6,8,10,15,18,20]; material(21).CF=1.81;
material(22).Sy=420; material(22).t=[2,4,6,8,10,12,14]; material(22).CF=2.06;
material(23).Sy=460; material(23).t=[1,2,4,6,8,10,12];
save ('Materials_table.mat', 'material')
%INPUTS-2: Physical inputs
P_bar=str2double(get(findobj('tag','Pressure'),'string')); %Internal Pressure of pressure vessel (Bar)
C=str2double(get(findobj('tag','Capacity'),'string')); %Capacity (Litres)
n_d=str2double(get(findobj('tag','Safety Factor'),'string')); %safety factor
L_t=str2double(get(findobj('tag','Length Constraint'),'string')); %length of pressure vessel (m)
H=str2double(get(findobj('tag','Height Constraint'),'string')); %Height of pressure vessel (m)
step=str2double(get(findobj('tag','step'),'string')); %step for loop
%conversion
P=P_bar*10^5; %conversion of Mpa to Pa
C=C*10^-3; %conversion of litres to m^3
%------------------------------------------------------------------------------------
%Errors
sol=[];
if P_bar <= 0
set(findobj('tag','errors'),'string','Un valid value of internal pressure')
clc
return
elseif isempty (P_bar) == true
set(findobj('tag','errors'),'string','Un valid value of internal pressure')
clc
return
end
if L_t <= 0
set(findobj('tag','errors'),'string','Un valid value of the lenght')
elseif isempty (L_t) == true
set(findobj('tag','errors'),'string','Un valid value of the lenght')
clc
return
end
if n_d <= 0
set(findobj('tag','errors'),'string','Un valid value of safety factor')
elseif isempty (n_d) == true
set(findobj('tag','errors'),'string','Un valid value of safety factor')
clc
return
end
if C <= 0
set(findobj('tag','errors'),'string','Un valid value of the capacity')
elseif isempty (C) == true
set(findobj('tag','errors'),'string','Un valid value of the capacity')
clc
return
end
if H <= 0
set(findobj('tag','errors'),'string','Un valid value of the height')
elseif isempty (H) == true
set(findobj('tag','errors'),'string','Un valid value of the height')
clc
return
end
if step <= 0
set(findobj('tag','errors'),'string','Un valid value of the step radius')
elseif isempty (step) == true
set(findobj('tag','errors'),'string','Un valid value of the step radius')
clc
return
elseif isempty (step) > 1
set(findobj('tag','errors'),'string','Un valid value of the step radius')
clc
return
end
%Calculations
for k=1:1:lenght(Material)
CF=material(k).CF;
S_y=material(k).S_y*10e6;
allow_stress=S_y/n_d;
end
for x=1:3:lenght(material(x).t)
t=material(x).t(x)/1000;
z=H/2-t;
end
for r_i=0:step:z
r_o=r_i+t;
L_t=L+2*r_o;
end
if t/r_i >= 0.05
stress_t=((ri^2*P)/(ro^2-ri^2))*(1+(ro^2/ri^2));
stress_r=((ri^2*P)/(ro^2-ri^2))*(1-(ro^2/ri^2));
stress_l=((ri^2*P)/(ro^2-ri^2));
type=thick;
else
stress_t=P*ri/t;
stress_r=0;
stress_l=P*ri/(2*t);
type=thin;
end
stress_VM= sqrt(((stress_t-stress_r)^2+(stress_t-stress_l)^2+(stress_l-stress_r)^2)/2);
if stress_VM <= allow_stress && L>0
V_mat= 2*pi*r_i*t*L+4*pi*r_i^2*t;
CI=V_mat*CF;
stress_alldisp=stress_all/10e6;
stress_VMdisp=stress_VM/10e6;
L_tDisp=L+2*ro;
Hdisp=2*ro;
sol=[sol;r_i,r_o,t,stress_alldisp,stress_VMdisp,V_mat,CI,L_tDisp,Hdisp,type];
end
sol_sorted=sortrows(sol,8);
opt_sol=sol_sorted(1,:);
%outputs
set(findobj('tag','Inner radius'),'string', (sol_sorted(1,1)))
set(findobj('tag','Material number'),'string', (sol_sorted(1,2)))
set(findobj('tag','Thickness'),'string', (sol_sorted(1,3)))
set(findobj('tag','Total lenght'),'string', (sol_sorted(1,4)))
set(findobj('tag','Allowable Stress'),'string', (sol_sorted(1,5)))
set(findobj('tag','Von Mises Stress'),'string', (sol_sorted(1,6)))
set(findobj('tag','Vessel material volume'),'string', (sol_sorted(1,7)))
set(findobj('tag','Vessel Cost Index'),'string', (sol_sorted(1,8)))
set(findobj('tag','Height'),'string', (sol_sorted(1,9)))
set(findobj('tag','Outer radius'),'string', (sol_sorted(1,10)))
set(findobj('tag','Thickness type'),'string', (sol_sorted(1,11)))
this is my code

Sign in to comment.

Answers (2)

KALYAN ACHARJYA
KALYAN ACHARJYA on 5 Mar 2021
Edited: KALYAN ACHARJYA on 5 Mar 2021
This is due to a name mismatch between the upper case or lower case in the custom function name. Matlab is case-sensitive. Modify either in the function name or the main script.
  2 Comments
Sura Hatem Basir Al-Ani
Sura Hatem Basir Al-Ani on 5 Mar 2021
%Initialisation---------------------------------------
clc;clear;format short g;format compact;
%-------------------------------------------------
%file name: Mat_Data
%thickness and cost factor
%INPUTS-1: search parameters
material(1).Sy=170; material(1).t=[2,4,6,8,10,20,30]; material(1).CF=1.00;
material(2).Sy=280; material(2).t=[1,2,3,4,6,8,10,12,14,16,18,20]; material(2).CF=1.37;
material(3).Sy=180; material(3).t=[2,4,6,8,10,20]; material(3).CF=0.88;
material(4).Sy=300; material(4).t=[2,4,6,8,10,20]; material(4).CF=1.47;
material(5).Sy=190; material(5).t=[2,4,6,8,10,20]; material(5).CF=0.93;
material(6).Sy=320; material(6).t=[2,4,6,8,10,20]; material(6).CF=1.57;
material(7).Sy=220; material(7).t=[2,4,6,8,10,20]; material(7).CF=1.08;
material(8).Sy=370; material(8).t=[1,2,3,4,6,7,8,9,10,12,14,16]; material(8).CF=1.81;
material(9).Sy=210; material(9).t=[2,4,6,8,10,14,16,20,30,40]; material(9).CF=1.03;
material(10).Sy=390; material(10).t=[1,2,3,4,6,8,10,12,14,16,18,20]; material(10).CF=1.91;
material(11).Sy=260; material(11).t=[ 2,4,6,8,10,12,16,20,30,40,50]; material(11).CF=1.27;
material(12).Sy=440; material(12).t=[2,4,6,8,10]; material(12).CF=2.16;
material(13).Sy=270; material(13).t=[1,2,3,4,5,6,7,8,9,10]; material(13).CF=1.32;
material(14).Sy=460; material(14).t=[1,2,3,4,5,6,7,8,9,10]; material(14).CF=2.25;
material(15).Sy=290; material(15).t=[2,4,6,8,10,12,18,20,30]; material(15).CF=1.42;
material(16).Sy=490; material(16).t=[1,2,3,4,5,6,7,8,9,10]; material(16).CF=2.40;
material(17).Sy=310; material(17).t=[1,2,3,4,5,6,7,8,9,10]; material(17).CF=1.52;
material(18).Sy=530; material(18).t=[10,20,30]; material(18).CF=2.60;
material(19).Sy=340; material(19).t=[4,5,8,14,20]; material(19).CF=1.67;
material(20).Sy=580; material(20).t=[2,4,6,8,10]; material(20).CF=2.84;
material(21).Sy=370; material(21).t=[2,4,6,8,10,15,18,20]; material(21).CF=1.81;
material(22).Sy=420; material(22).t=[2,4,6,8,10,12,14]; material(22).CF=2.06;
material(23).Sy=460; material(23).t=[1,2,4,6,8,10,12];
save ('Materials_table.mat', 'material')
%INPUTS-2: Physical inputs
P_bar=str2double(get(findobj('tag','Pressure'),'string')); %Internal Pressure of pressure vessel (Bar)
C=str2double(get(findobj('tag','Capacity'),'string')); %Capacity (Litres)
n_d=str2double(get(findobj('tag','Safety Factor'),'string')); %safety factor
L_t=str2double(get(findobj('tag','Length Constraint'),'string')); %length of pressure vessel (m)
H=str2double(get(findobj('tag','Height Constraint'),'string')); %Height of pressure vessel (m)
step=str2double(get(findobj('tag','step'),'string')); %step for loop
%conversion
P=P_bar*10^5; %conversion of Mpa to Pa
C=C*10^-3; %conversion of litres to m^3
%------------------------------------------------------------------------------------
%Errors
sol=[];
if P_bar <= 0
set(findobj('tag','errors'),'string','Un valid value of internal pressure')
clc
return
elseif isempty (P_bar) == true
set(findobj('tag','errors'),'string','Un valid value of internal pressure')
clc
return
end
if L_t <= 0
set(findobj('tag','errors'),'string','Un valid value of the lenght')
elseif isempty (L_t) == true
set(findobj('tag','errors'),'string','Un valid value of the lenght')
clc
return
end
if n_d <= 0
set(findobj('tag','errors'),'string','Un valid value of safety factor')
elseif isempty (n_d) == true
set(findobj('tag','errors'),'string','Un valid value of safety factor')
clc
return
end
if C <= 0
set(findobj('tag','errors'),'string','Un valid value of the capacity')
elseif isempty (C) == true
set(findobj('tag','errors'),'string','Un valid value of the capacity')
clc
return
end
if H <= 0
set(findobj('tag','errors'),'string','Un valid value of the height')
elseif isempty (H) == true
set(findobj('tag','errors'),'string','Un valid value of the height')
clc
return
end
if step <= 0
set(findobj('tag','errors'),'string','Un valid value of the step radius')
elseif isempty (step) == true
set(findobj('tag','errors'),'string','Un valid value of the step radius')
clc
return
elseif isempty (step) > 1
set(findobj('tag','errors'),'string','Un valid value of the step radius')
clc
return
end
%Calculations
for k=1:1:lenght(Material)
CF=material(k).CF;
S_y=material(k).S_y*10e6;
allow_stress=S_y/n_d;
end
for x=1:3:lenght(material(x).t)
t=material(x).t(x)/1000;
z=H/2-t;
end
for r_i=0:step:z
r_o=r_i+t;
L_t=L+2*r_o;
end
if t/r_i >= 0.05
stress_t=((ri^2*P)/(ro^2-ri^2))*(1+(ro^2/ri^2));
stress_r=((ri^2*P)/(ro^2-ri^2))*(1-(ro^2/ri^2));
stress_l=((ri^2*P)/(ro^2-ri^2));
type=thick;
else
stress_t=P*ri/t;
stress_r=0;
stress_l=P*ri/(2*t);
type=thin;
end
stress_VM= sqrt(((stress_t-stress_r)^2+(stress_t-stress_l)^2+(stress_l-stress_r)^2)/2);
if stress_VM <= allow_stress && L>0
V_mat= 2*pi*r_i*t*L+4*pi*r_i^2*t;
CI=V_mat*CF;
stress_alldisp=stress_all/10e6;
stress_VMdisp=stress_VM/10e6;
L_tDisp=L+2*ro;
Hdisp=2*ro;
sol=[sol;r_i,r_o,t,stress_alldisp,stress_VMdisp,V_mat,CI,L_tDisp,Hdisp,type];
end
sol_sorted=sortrows(sol,8);
opt_sol=sol_sorted(1,:);
%outputs
set(findobj('tag','Inner radius'),'string', (sol_sorted(1,1)))
set(findobj('tag','Material number'),'string', (sol_sorted(1,2)))
set(findobj('tag','Thickness'),'string', (sol_sorted(1,3)))
set(findobj('tag','Total lenght'),'string', (sol_sorted(1,4)))
set(findobj('tag','Allowable Stress'),'string', (sol_sorted(1,5)))
set(findobj('tag','Von Mises Stress'),'string', (sol_sorted(1,6)))
set(findobj('tag','Vessel material volume'),'string', (sol_sorted(1,7)))
set(findobj('tag','Vessel Cost Index'),'string', (sol_sorted(1,8)))
set(findobj('tag','Height'),'string', (sol_sorted(1,9)))
set(findobj('tag','Outer radius'),'string', (sol_sorted(1,10)))
set(findobj('tag','Thickness type'),'string', (sol_sorted(1,11)))
this is my code

Sign in to comment.


Walter Roberson
Walter Roberson on 5 Mar 2021
for k=1:1:lenght(Material)
You have not defined any variable named Material but you have defined a variable named material . As you are looping over the number of elements of something and inside that loop you access material() indexed by the loop variable, it would be most natural to take the length of material rather than of whatever Material is.
CF=material(k).CF;
S_y=material(k).S_y*10e6;
allow_stress=S_y/n_d;
end
for x=1:3:lenght(material(x).t)
t=material(x).t(x)/1000;
z=H/2-t;
end
Please also pay attention to the fact that in both of those for loops you use a function named lenght when you probably intended length -- ht compared to th
  3 Comments
Walter Roberson
Walter Roberson on 5 Mar 2021
for nux=1:3:lenght(material(x).t)
t=material(x).t(x)/1000;
z=H/2-t;
end
You are taking whatever value if x is left over in memory and using it to index the material structure, and you find the length of the t field there. You use that length as the upper limit in a for x loop. You then use that to index the material structure and pull out the t field and then you use the same index to index the t vector. This is sort of like going down the diagonal
For example if the value of x in memory happened to be 2 then you would have taken length of material(2).t which is 12. You would then be doing for x = 1:3:12. You would access materials(1).t(1) then materials(4).t(4) then materials(7).t(7) but that would fail because materials(7).t is only 6 elements long.
Note also that when you succeed in indexing the t vector that you calculate z. However you do not save the value and it will be overwritten by the next for x iteration.

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by