In [1]:
format compact  % zmiana sposobu wyświetlania wyników w MATLAB(bez zbędnych pustych linii)

Aproksymacja - plan dwupoziomowy

Belka jednostronnie utwierdzona

Dana jest belka o długości \(L\) z materiału o module Younga \(E\) posiadająca przekrój prostokątny o momencie bezwładności \(I\) (wyznaczonym na podstawie jego szerokości \(w\) i wysokości \(h\)). Równanie różniczkowe opisujące ugięcie belki utwierdzonej na jedmym końcu (dla \(x=L\)) z obciążeniem ciągłym \(Q\) ma postać

\[\mathrm{EI}\,\frac{\partial ^4}{\partial x^4} y\left(x\right)=Q\]

Przemieszczenia maksymalne w belce występują na jej swobodnym końcu i wynoszą

\[\delta_{max} (w,h) =\frac{3\,L^4\,Q}{2 E\,h^3\,w}\]

Naprężenia maksymalne w belce występują na jej utwierdzonym końcu i wynoszą

\[\sigma_{max} (w,h) =\frac{3\,L^2\,Q}{h^2\,w}\]

Zakładając, że \(L=1\) m, \(E=2 \cdot 10^{11}\) Pa, \(Q= 10^{5}\) N, oraz że \(w\) i \(h\) zawierają się w przedziale \([0.1, 0.2]\) m

Zapis pliku funkcyjnego opisującego model

In [2]:
%%file model_belki.m
function [delta_max sigma_max]=model_belki(w, h)
L=1;Q=1e5;E=1e11;
delta_max= (3*L^4*Q)/(2*E*h^3*w);
sigma_max = (3*L^2*Q)/(h^2*w);

Created file 'D:\Wprowadzenie_do_MATLAB\model_belki.m'.
In [3]:
[d s]=model_belki(0.1, 0.1)
d =
    0.0150
s =
   3.0000e+08

Eksperyment dwupoziomowy

In [4]:
clear all
x_lim=[.1 .2
       .1 .2]
x_lim =
    0.1000    0.2000
    0.1000    0.2000

In [5]:
dFF2 = ff2n(2)
dFF2 =
     0     0
     0     1
     1     0
     1     1

In [6]:
%przeskalowanie planu do przedziału [-1,1]
x=dFF2*2-1
x =
    -1    -1
    -1     1
     1    -1
     1     1

In [7]:
Experiment=zeros(size(x));
Experiment(x(:,1)==-1,1)=x_lim(1,1);
Experiment(x(:,1)==1,1)=x_lim(1,2);
Experiment(x(:,2)==-1,2)=x_lim(2,1);
Experiment(x(:,2)==1,2)=x_lim(2,2);
Experiment
Experiment =
    0.1000    0.1000
    0.1000    0.2000
    0.2000    0.1000
    0.2000    0.2000

In [8]:
for k=1:length(x(:,1))
[d s]=model_belki(Experiment(k,1), Experiment(k,2));
y(k,1)=d;
end
y
y =
    0.0150
    0.0019
    0.0075
    0.0009

In [9]:
plot3(x(:,1),x(:,2),y(:,1),'o')
xlabel('x_1'), ylabel('x_2'), zlabel('y_1')
grid on

_images/aproksymacja_14_1.png
In [10]:
figure
subplot(2,2,1)
plot3(x(:,1),x(:,2),y(:,1),'o'), xlabel('x_1'), ylabel('x_2'), zlabel('y_1'), grid on, view(0,90)
subplot(2,2,3)
plot3(x(:,1),x(:,2),y(:,1),'o'), xlabel('x_1'), ylabel('x_2'), zlabel('y_1'), grid on, view(0,0)
subplot(2,2,4)
plot3(x(:,1),x(:,2),y(:,1),'o'), xlabel('x_1'), ylabel('x_2'), zlabel('y_1'), grid on, view(90,0)

_images/aproksymacja_15_1.png

Aproksymacja punktów powierzchnią odpowiedzi

In [11]:
%Założenie postaci funkcji
%f1(x1,x2) = a00+a10*x1+a01*x2

X=[ones(length(x(:,1)),1) x(:,1) x(:,2)]

Y=y(:,1)
%XA=Y
A=X\Y

a00=A(1);a10=A(2);a01=A(3);
f1=@(x1,x2) a00+a10*x1+a01*x2
[X1,X2]=meshgrid([-1:0.1:1]);
Y1=f1(X1,X2);

X =
     1    -1    -1
     1    -1     1
     1     1    -1
     1     1     1
Y =
    0.0150
    0.0019
    0.0075
    0.0009
A =
    0.0063
   -0.0021
   -0.0049
f1 =
  function_handle with value:
    @(x1,x2)a00+a10*x1+a01*x2

In [12]:
surf(X1,X2,Y1)
hold on
plot3(x(:,1),x(:,2),y(:,1),'o')
xlabel('x_1'), ylabel('x_2'), zlabel('y_1')
view(45,45)
grid on

_images/aproksymacja_18_1.png
In [13]:
%syms x1 x2        % alternatywny sposób narysowania wykresu
%f2=a00 + a10*x1 + a01*x2 + a11*x1*x2
%fsurf(f2,[-1 1])
%hold on
%plot3(x(:,1),x(:,2),y(:,1),'o')

Zmiana postaci funkcji opisującej powierzchnię

In [14]:
%Założenie postaci funkcji
%f2(x1,x2) = a00+a10*x1+a01*x2+a11*x1*x2

X=[ones(length(x(:,1)),1) x(:,1) x(:,2) x(:,1).*x(:,2)]

Y=y(:,1)
%XA=Y
A=X\Y

a00=A(1);a10=A(2);a01=A(3);a11=A(4);

f2=@(x1,x2) a00 + a10*x1 + a01*x2 + a11*x1.*x2
[X1,X2]=meshgrid([-1:.2:1]);
Y2=f2(X1,X2);
X =
     1    -1    -1     1
     1    -1     1    -1
     1     1    -1    -1
     1     1     1     1
Y =
    0.0150
    0.0019
    0.0075
    0.0009
A =
    0.0063
   -0.0021
   -0.0049
    0.0016
f2 =
  function_handle with value:
    @(x1,x2)a00+a10*x1+a01*x2+a11*x1.*x2

In [15]:
surf(X1,X2,Y2)
hold on
plot3(x(:,1),x(:,2),y(:,1),'o')
xlabel('x_1'), ylabel('x_2'), zlabel('y_2')
view(45,45)
grid on

_images/aproksymacja_22_1.png

Aproksymacja w sposób „pół-automatyczny” przy pomocy cftool (Curve Fitting Toolbox)

In [16]:
help cftool
  CFTOOL   Open Curve Fitting Tool.

    CFTOOL opens Curve Fitting Tool or brings focus to the Tool if it is already
    open.

    CFTOOL( X, Y ) creates a curve fit to X input and Y output. X and Y must be
    numeric, have two or more elements, and have the same number of elements.
    CFTOOL opens Curve Fitting Tool if necessary.

    CFTOOL( X, Y, Z ) creates a surface fit to X and Y inputs and Z output. X, Y,
    and Z must be numeric, have two or more elements, and have compatible sizes.
    Sizes are compatible if X, Y, and Z all have the same number of elements or X
    and Y are vectors, Z is a 2D matrix, length(X) = n, and length(Y) = m where
    [m,n] = size(Z). CFTOOL opens Curve Fitting Tool if necessary.

    CFTOOL( X, Y, [], W ) creates a curve fit with weights W. W must be numeric
    and have the same number of elements as X and Y.

    CFTOOL( X, Y, Z, W ) creates a surface fit with weights W. W must be numeric
    and have the same number of elements as Z.

    CFTOOL( FILENAME ) loads the surface fitting session in FILENAME into Curve
    Fitting Tool. The FILENAME should have the extension '.sfit'.

    Reference page in Doc Center
       doc cftool



In [17]:
x1=x(:,1); x2=x(:,2); y1=y(:,1); cftool(x1,x2,y1);

In [18]:
ft = fittype( 'a00 + a10*x1 + a01*x2 +a11*x1*x2', 'independent', {'x1', 'x2'}, 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Algorithm = 'Levenberg-Marquardt';

sf = fit( x, y(:,1), ft, opts)

plot3(x(:,1),x(:,2),y(:,1),'o')
xlabel('x_1'), ylabel('x_2'), zlabel('y_1')
grid on, view(45,45)

hold on
plot(sf)
Warning: Start point not provided, choosing random start point.
> In curvefit.attention.Warning/throw (line 30)
  In fit>iFit (line 299)
  In fit (line 108)
     General model:
     sf(x1,x2) = a00 + a10*x1 + a01*x2 +a11*x1*x2
     Coefficients:
       a00 =    0.006328
       a01 =   -0.004922
       a10 =   -0.002109
       a11 =    0.001641

_images/aproksymacja_26_1.png