Least Square Methods: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ

рдореИрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ "рдбрд┐рдЬрд┐рдЯрд▓ рднреВрд╡рд┐рдЬреНрдЮрд╛рди" рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рд╣рдм рдкрд░ рдЪрдХреНрд░ рд╕реЗ рддреАрд╕рд░рд╛ рдкреНрд░рдХрд╛рд╢рди рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдПрдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдерд╛, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рд░реИрдЦрд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдп рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдЪрдп рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЖрдЬ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп: рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реАрдЦрдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрд╕реНрдЯрд░ рджреНрд╡реАрдк рд╕реЗ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рдПрдХ рдореВрд░реНрддрд┐ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛:



рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдпреЛрдЬрдирд╛:


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо рднрдВрдбрд╛рд░ рдпрд╣рд╛рдВ рд░рд╣рддрд╛ рд╣реИ ред рдкреБрд╕реНрддрдХ рдЕрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╣реИрдмреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореЗрд░рд╛ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдиреНрдпреВрдирддрдо рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛; рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдСрди / рдСрдл рдмрдЯрди рдХрд╣рд╛рдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрдореЛрд░реА рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░реЗрдВ рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреНрдпрд╛ рд╣реИрдВ, рдПрдХ рдкреЙрдЬрд┐рдЯрд┐рд╡ рдирдВрдмрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рднреА рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреНрдпрд╛ рд╣реИред

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд╕рдВрдЦреНрдпрд╛


рдЗрд╕ рдкрд╛рда рдореЗрдВ рдореИрдВ рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рддреЛ рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдкрд╛рда рдореЗрдВ рдЖрдЧреЗ рди рджреЗрдЦреЗрдВ, рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░реБрдХреЗрдВ, рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

рд╡рд┐рднрд┐рдиреНрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡реНрдпрд╛рдЦреНрдпрд╛рдПрдВ


рдЬрд╡рд╛рдм рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рд┐рд░реНрдл рдПрдХ рдХреИрдмрд┐рдиреЗрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣реЙрд░реНрд╕рд░реИрдбрд┐рд╢ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧрдВрджрдЧреА рдЕрдкрдиреЗ рд╕реЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрддреА рд╣реИ, рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдмрдХрд╡рд╛рд╕ рд╣реИрдВ; рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдПрдП рдХреБрдЫ рдкрд╕рдВрдж рд╣реИ

float A[m][n]; 

рдРрд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╡реЗ рдХреНрдпрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж рдореИрдВ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рджреВрдВ, рд▓реЗрдХрд┐рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЦреБрдж рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВ, рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдП рдХрдПрдХ ред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рд╣рд╛рдВ, рд╢реИрддрд╛рди рдЬрд╛рдирддрд╛ рд╣реИ ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЧреБрдгрд╛рдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдВрдмрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдФрд░ рджреЗрддрд╛ рд╣реИ:

f ( x ) : m a t h b b R r i g h t a r r o w m a t h b b R   



рдПрдХ рдЧрдгрд┐рддрдЬреНрдЮ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

рдЪ ( рдПрдХреНрд╕ ) = рдХ реБ рд▓ реН рд╣ рд╛ рдб рд╝ реА

рдЪрдХреБрд▓реНрд╣рд╛рдбрд╝реА


рдареАрдХ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 float f(float x) { return a*x; } 

рджреВрд╕рд░реА рдУрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣, рдФрд░ рдХрд╛рдлреА рдЕрдиреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЪрд▓реЛ рдПрдХ рдФрд░ рд▓реЗ рд▓реЛ!

f ( x ) = a x 2


рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдореБрдЭреЗ рдЙрд╕рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ :)

 float f(float x) { return x*a*x; } 

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░реИрдЦрд┐рдХ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рджреНрд╡рд┐рдШрд╛рдд рд╣реИред рдХреМрди рд╕рд╛ рд╕рд╣реА рд╣реИ? рдирд╣реАрдВ, рд╕рдВрдЦреНрдпрд╛ рд╣реА рдП рдХрдПрдХ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдХреБрдЫ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ! рдЖрдкрдХреЛ рдХрд┐рд╕ рдлрдВрдХреНрд╢рди рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдПрдХ рдЬреИрд╕рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред

рдпрд╣реА рдмрд╛рдд рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддреА рд╣реИ, рдЗрди рд╕реНрдЯреЙрд░реЗрдЬреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рд╣реА рдирдВрдмрд░ (рд╕реНрдХреЗрд▓рд░) рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рддрд░рд╣ рдХрд╛ рдирдВрдмрд░ред рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рдКрдкрд░, рдирдВрдмрд░реЛрдВ рдХреА рддрд░рд╣, рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдПрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ 2x2:

A = \ start {bmatrix} a_ {11} & a_ {12} \\ a_ {21} рдФрд░ a_ {22} \ end {bmatrix}

A = \ start {bmatrix} a_ {11} & a_ {12} \\ a_ {21} рдФрд░ a_ {22} \ end {bmatrix}



рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

f(x): mathbbR2 rightarrow mathbbR2, quadf(x)=Ax



 vector<float> f(vector<float> x) { return vector<float>{a11*x[0] + a12*x[1], a21*x[0] + a22*x[1]}; } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдХреЛ рджреЛ-рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрд▓реЗрдЦреАрдп рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдЫрд╡рд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рд╣рдо рдЫрд╡рд┐ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрдЯреНрд░реЗрдЪ рдФрд░ / рдпрд╛ рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рджрд░реНрдкрдг рднреА!) рд╕рдВрд╕реНрдХрд░рдгред рдмрд╣реБрдд рдЬрд▓реНрдж рдореИрдВ рдореИрдЯреНрд░рд┐рд╕ рдХреА рдРрд╕реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рджреВрдВрдЧрд╛ред

рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рджреЛ рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рд╕реНрдХреЗрд▓рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:

f(x): mathbbR2 rightarrow mathbbR, quadf(x)=x topAx= sum limiti sum limitjaijxiтИТixj



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдШрд╛рддрд╛рдВрдХ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддрд╛ x2 , рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреЛ рдЯрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдирд┐рдпрдо рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред x topAx рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдПрдХ рд╕реНрдХреЗрд▓рд░ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрд╖реНрдардХ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ x topAx=(x topA)x ред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ x рдЖрдпрд╛рдо 2 рдХрд╛ рд╡реЗрдХреНрдЯрд░ рд╣реИ (рдЖрдпрд╛рдо 2x1 рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд), рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрдпрд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

\ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {\ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {\ рд▓реЗрдлреНрдЯ (\ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {рдПрдХреНрд╕ ^ \ рдЯреЙрдк} _ {1 \ рдЯрд╛рдЗрдореНрд╕ 2} \ рдмрд╛рд░ \ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {рдП} _ {2 \ 2 рдмрд╛рд░ 2} \ рд░рд╛рдЗрдЯ)} _ {1 \ _ 2} 2} \ рдЧреБрдирд╛ \ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {x} _ {2 \ рдЯрд╛рдЗрдореНрд╕ 1}} _ {1 \ рдЯрд╛рдЗрдореНрд╕ 1}



рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЧрд░реНрдо рдФрд░ рд╢рд░рд╛рдмреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рд╣реА рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 float f(vector<float> x) { return x[0]*a11*x[0] + x[0]*a12*x[1] + x[1]*a21*x[0] + x[1]*a22*x[1]; } 

рдкреЙрдЬрд┐рдЯрд┐рд╡ рдирдВрдмрд░ рдХреНрдпрд╛ рд╣реИ?


рдЕрдм рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреЗрд╡рдХреВрдл рд╕рд╡рд╛рд▓ рдкреВрдЫреВрдВрдЧрд╛: рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рдПрдХ рд╡рд┐рдзреЗрдп рдирд╛рдордХ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИ > ред рд▓реЗрдХрд┐рди рдЙрд╕ рдирдВрдмрд░ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдордп рд▓реЗрдВ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдЧрд░ рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ a>0 рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЖрдЗрдП рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

рдкрд░рд┐рднрд╛рд╖рд╛ рез


рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдФрд░ рдпрджрд┐ рдХреЗрд╡рд▓ рд╕рднреА рдЧреИрд░-рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП x in mathbbR, x neq0 рд╣рд╛рд▓рдд рд╕рдВрддреБрд╖реНрдЯ рд╣реИ рдХреБрд▓реНрд╣рд╛рдбрд╝реА2>0 ред

рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореИрдЯреНрд░реАрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ:

рдкрд░рд┐рднрд╛рд╖рд╛ реи


рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдЧрд░, рдХрд┐рд╕реА рднреА рдЧреИрд░ рдХреЗ рд▓рд┐рдП x рд╣рд╛рд▓рдд рд╕рдВрддреБрд╖реНрдЯ рд╣реИ x рд╢реАрд░реНрд╖Ax>0 рдЕрд░реНрдерд╛рддреН, рдореВрд▓ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк рд╕рдЦреНрддреА рд╕реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

рдореБрдЭреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореЗрд░рд╛ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдиреНрдпреВрдирддрдо рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди f(x)=тИТx2 рдиреНрдпреВрдирддрдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдВрдмрд░ -1 рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЪ(x) рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдЕрдВрддрд╣реАрди рдШрдЯ рдЬрд╛рддреА рд╣реИ x : рдПрдХ рдкрд░рд╡рд▓рдп рдХреА рд╢рд╛рдЦрд╛рдПрдБ рдЪ(x) рдиреАрдЪреЗ рджреЗрдЦреЛред рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рджреНрд╡рд┐рдШрд╛рдд рд░реВрдкреЛрдВ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдмреЛрд▓рд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдирддрдо (рдЕрджреНрд╡рд┐рддреАрдп) рд╣реЛрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд╛рдВрдд рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред 2рдмрд╛рд░2 , рджреЛрдиреЛрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рд╕рдордорд┐рдд, рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдКрдкрд░реА рдкрдВрдХреНрддрд┐: рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ f(x): mathbbR2 rightarrow mathbbR2 ред рдордзреНрдп рдкрдВрдХреНрддрд┐: рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ f(x): mathbbR2 rightarrow mathbbR ред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рднреА рд╕рдордорд┐рдд рд╣реЛрдЧрд╛! рдпрд╣ рдЙрддреНрд╕реБрдХ рд╣реИ рдХрд┐ рдХрд╛рдлреА рдмрд╛рд░ рдЬрдм рд▓реЛрдЧ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдорддрд▓рдм рд╕рдорд░реВрдкрддрд╛ рднреА рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмрд╛рдж рдХреЗ рдкрд╛рда рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ)ред

рджреНрд╡рд┐рдШрд╛рдд рд░реВрдкреЛрдВ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдорд░реВрдкрддрд╛ рдкрд░ рдЧреЗрдп рд╡рд┐рд╖рдпрд╛рдВрддрд░


рдЖрдЗрдП рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк рдХреЛ рджреЗрдЦреЗрдВ x рд╢реАрд░реНрд╖Mx рдПрдХ рдордирдорд╛рдирд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдо ; рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдо рдЗрд╕рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рддреБрд░рдВрдд рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдШрдЯрд╛рдПрдБ:

M = \ underbrace {\ frac {1} {2} (M + M ^ \ top)} _ {: = M_s} + \ underbrace {\ frac {1} {2} (MM ^ \ top)} {{ : = M_a} = M_s + M_a



рдореИрдЯреНрд░рд┐рдХреНрд╕ Ms рд╕рдордорд┐рдд: M stop=Ms ; рдореИрдЯреНрд░рд┐рдХреНрд╕ Ma antisymmetric: M atop=тИТMa ред рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдВрдЯреАрд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡рд▓реЛрдХрди рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

q=x рд╢реАрд░реНрд╖Max=(x рд╢реАрд░реНрд╖M aрд╢реАрд░реНрд╖x) рд╢реАрд░реНрд╖=тИТ(x рд╢реАрд░реНрд╖Max) рд╢реАрд░реНрд╖=тИТq


рд╡рд╣ рд╣реИ, рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк x рд╢реАрд░реНрд╖Max рдПрдХ рд╕рд╛рде рдмрд░рд╛рдмрд░ q рдФрд░ тИТq , рдЬреЛ рддрднреА рд╕рдВрднрд╡ рд╣реИ q equiv0 ред рдЗрд╕ рддрдереНрдп рд╕реЗ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдПрдХ рдордирдорд╛рдирд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдо рдЗрд╕реА рдЪрддреБрд░реНрднреБрдЬ рд░реВрдк x рд╢реАрд░реНрд╖Mx рдПрдХ рд╕рдордорд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ Ms :

x рд╢реАрд░реНрд╖Mx=x рд╢реАрд░реНрд╖(Ms+Ma)x=x рд╢реАрд░реНрд╖Msx+x рд╢реАрд░реНрд╖Max=x рд╢реАрд░реНрд╖Msxред



рд╣рдо рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдп рдХреА рдиреНрдпреВрдирддрдо рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рд╣рдореЗрдВ рдПрдХ рдЖрдпрд╛рдореА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓реМрдЯреЗрдВ; рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ f(x)=ax2тИТ2bx ред рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдЗрд╕рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдореМрдЬреВрдж рд╣реИ; рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ:  fracddxf(x)=0 ред рд╢реНрд░рдо рдХреЗ рдПрдХ рдЖрдпрд╛рдореА рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдп рдореЗрдВ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ:  fracddxf(x)=2axтИТ2b=0 ; рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрд╛рд▓рддреА рд╣реИ рдХреБрд▓реНрд╣рд╛рдбрд╝реАтИТb=0 , рдЬрд╣рд╛рдВ, рднрдпрд╛рдирдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ xтИЧ=b/a ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝рд╛ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: рд╕рдорд╛рдзрд╛рди xтИЧ рд╕рдореАрдХрд░рдг рдХреБрд▓реНрд╣рд╛рдбрд╝реАтИТb=0 рд╕рдореАрдХрд░рдг рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ  mathrmargminx(ax2тИТ2bx) ред



рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рдХреНрд╖реНрдп рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЪреНрдЫрд╛ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ (рдФрд░ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА)ред рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ!

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЖрдпрд╛рдореА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╕рдорд╛рдирддрд╛ рдорд╛рдорд▓реЗ рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИ рдПрди рдЪрд░ред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рддреАрди рдкреНрд░рдореЗрдп рд╕рд┐рджреНрдз рдХрд░рддреЗ рд╣реИрдВред

рддреАрди рдкреНрд░рдореЗрдп, рдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ


рдкрд╣рд▓реЗ рдкреНрд░рдореЗрдп рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдкрдХреНрд╡рддрд╛ 1 рдЧреБрдирд╛1 рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝реЗрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдорд▓рд╛рд╡рд░:

рдкреНрд░рдореЗрдп рез


x in mathbbR Rightarrowx top=x

рдкреНрд░рдорд╛рдг рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рджреВрд╕рд░рд╛ рдкреНрд░рдореЗрдп рд╣рдореЗрдВ рд░реИрдЦрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЪрд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐  fracddx(bx)=b рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдПрди рдЪрд░?

рдкреНрд░рдореЗрдп реи


 nablab topx= nablax topb=b

рдпрд╣реА рдирд╣реАрдВ, рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, рдПрдХ рд╣реА рд╕реНрдХреВрд▓ рдкрд░рд┐рдгрд╛рдо рдХреА рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧред рдкреНрд░рдорд╛рдг рдмреЗрд╣рдж рд╕реАрдзрд╛ рд╣реИ, рдмрд╕ рдврд╛рд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд┐рдЦреЗрдВ:

 nlala(b topx)= startbmatrix frac рдЖрдВрд╢рд┐рдХ(b рд╢реАрд░реНрд╖x) рдЖрдВрд╢рд┐рдХx1 vdots frac рдЖрдВрд╢рд┐рдХ(b)рд╢реАрд░реНрд╖x) рдЖрдВрд╢рд┐рдХxn endbmatrix= startbmatrix frac рдЖрдВрд╢рд┐рдХ(b1x1+ dots+bnxn) рдЖрдВрд╢рд┐рдХx1 vdots frac рдЖрдВрд╢рд┐рдХ(b1x1+ dots+bnxn) рдЖрдВрд╢рд┐рдХxn endbmatrix= startbmatrixb1 vdotsbn end(bmatrix)=b


рдкрд╣рд▓реЗ рдкреНрд░рдореЗрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ b рд╢реАрд░реНрд╖x=x рд╢реАрд░реНрд╖b , рд╣рдо рд╕рдмреВрдд рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдо рджреНрд╡рд┐рдШрд╛рдд рд░реВрдкреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЪрд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ  fracddx(ax2)=2ax , рдФрд░ рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдкреНрд░рдореЗрдп рей


 nabla(x topAx)=(A+A top)x

рд╡реИрд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рд╕рдордорд┐рдд, рдлрд┐рд░ рдкреНрд░рдореЗрдп рдХрд╣рддрд╛ рд╣реИ рдХрд┐  nрдирдмрд▓рд╛(x topAx)=2Ax ред

рдпрд╣ рдкреНрд░рдорд╛рдг рднреА рд╕реАрдзрд╛ рд╣реИ, рдмрд╕ рджреНрд╡рд┐рдШрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рджреНрд╡рд┐рдШрд╛рдд рд░реВрдк рд▓рд┐рдЦреЗрдВ:

x ^ \ рд╢реАрд░реНрд╖ A x = \ sum \ limit_i \ sum \ limit_j a_ {ij} x_i 0__


рдФрд░ рдлрд┐рд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЗрд╕ рджреЛрд╣рд░реЗ рдпреЛрдЧ рдХрд╛ рдЖрдВрд╢рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреНрдпрд╛ рд╣реИ xi :
\ start {align *}
\ frac {\ рдЖрдВрд╢рд┐рдХ (x ^ \ рд╢реАрд░реНрд╖ A x)} {\ рдЖрдВрд╢рд┐рдХ x_i}
& = \ frac {\ рдЖрдВрд╢рд┐рдХ} {\ рдЖрдВрд╢рд┐рдХ x_i} \ рдмрд╛рдИрдВ (\ рдпреЛрдЧ \ рд╕реАрдорд╛рдПрдВ {{k_1} \ _ \ _ рд╕реАрдорд╛рдПрдВ} {k_2} a_ {k_1 k_2} x_ {k_1} x_ {k_2} рд╕рд╣реА) = \\
& = \ frac {\ рдЖрдВрд╢рд┐рдХ} {\ рдЖрдВрд╢рд┐рдХ x_i} \ left (
\ underbrace {\ sum \ limit_ {k_1 \ neq i} \ sum \ limit_ {k_2 \ neq i} a_ {ik_2} x_ {k_1} x_ {k_2}} _ {k_1 \ neq i, k_2 \ neq i} + \ _ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {\ _ \ _ рд▓рд┐рдорд┐рдЯреНрд╕ {{k_2 \ neq i} a_ {ik_2} x_i x_ {k_2}} _ {k_1 = i, k_2 \ neq i} +
\ underbrace {\ _ \ _ limit_ {k_1 \ neq i} a_ {k_1 i} x_ {k_1} x_i} _ {k_1 \ neq i, k_2 = i} +
\ underbrace {a_ {ii} x_i ^ 2} _ {k_1 = i, k_2 = i} \ right) = \\
& = \ _ \ _ рд╕реАрдорд╛рдПрдВ {k_2 \ neq i} a_ {ik_2} x_ {k_2} + \ _ рдпреЛрдЧ рд╕реАрдорд╛рдПрдВ {{k_1 \ neq i} a_ {k_1 i} x_ {k_1} 2 2__ {ii} x_i = \\
& = \ _ \ _ рд╕реАрдорд╛рдПрдВ {{k_2} a_ {ik_2} x_ {k_2} + \ sum \ limit_ {k_1} a_ {k_1 i} x_ {k_1} = \\
& = \ _ \ _ limit_ {j} (a_ {ij} + a_ {ji}) x_j_\
\ рдЕрдВрдд {рд╕рдВрд░реЗрдЦрд┐рдд *}
рдореИрдВрдиреЗ рджреЛрд╣рд░реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЪрд╛рд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрди рдЪрд╛рд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдПрдХрддреНрд░ рдХрд░реЗрдВ:

\ nlala (x ^ \ top A x) = \ start {bmatrix} \ frac {\ рдЖрдВрд╢рд┐рдХ (x ^ \ top Ax)} {\ рдЖрдВрд╢рд┐рдХ x_1} \\ \ vdots \\ \ frac {\ рдЖрдВрд╢рд┐рдХ = x ^ \ рд╢реАрд░реНрд╖ A x)} {\ рдЖрдВрд╢рд┐рдХ x_n} \ end {bmatrix} = \ start {bmatrix} \ sum \ limit_ {j} (a_ {1j} + a_ {j1}) x_j \\ рдХреЗ \ n \ n \ _ \ _ \ _ \ sum \ limit_ {j} (a_ {nj} + a_ {jn}) x_j \ end {bmatrix} = (A + A ^ \ top) x



рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдиреНрдпреВрдирддрдо рдФрд░ рд░реИрдЦрд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд╛рдзрд╛рди


рдпрд╛рддреНрд░рд╛ рдХреА рджрд┐рд╢рд╛ рдХреЛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХ рдЪрд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░реЗрдВ рдХреБрд▓реНрд╣рд╛рдбрд╝реА=рдмреА рдпрд╛ рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВ  mathrmargminx(ax2тИТ2bx) рдПрдХ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬ рд╣реИрдВред

рд╣рдо рдПрдХ рд╕рдордорд┐рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдП ред
рдЗрд╕рд▓рд┐рдП рд╣рдо рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдп рдХрд╛ рдиреНрдпреВрдирддрдо рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

 mathrmargminx in mathbbRn(x topAxтИТ2b topx)ред$


рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдХреВрд▓ рдореЗрдВ, рд╣рдо рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░рддреЗ рд╣реИрдВ:

 nabla(x topAxтИТ2b topx)= startbmatrix0 vdots0 endbmatrixред$


рд╣реИрдорд┐рд▓реНрдЯрди рдСрдкрд░реЗрдЯрд░ рд░реИрдЦрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕рдореАрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 nabla(x topAx)тИТ2 nabla(b topx)= startbmatrix0 vdots0 endbmatrix


рдЕрдм рд╣рдо рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рднреЗрджрднрд╛рд╡ рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

(A+A top)xтИТ2b= startbmatrix0 vdots0 endbmatrix


рдЙрд╕рдХреЛ рдпрд╛рдж рдХрд░реЛ рдП рд╕рдордорд┐рдд, рдФрд░ рд╕рдореАрдХрд░рдг рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрди рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

рдЕрдХреНрд╖=рдмреА


рд╣реБрд░реНрд░реЗ, рдПрдХ рдЪрд░ рд╕реЗ рдХрдИ рддрдХ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдордиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рджреНрд╡рд┐рдШрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ


рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрд╕ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреА рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ рджреЛ рдмрд┐рдВрджреБ рд╣реИрдВ (x1,y1) рдФрд░ (x2,y2) , рдФрд░ рд╣рдо рдЗрди рджреЛ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдХреЗ рд╕рдореАрдХрд░рдг рдХреЛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд░реЗрдЦрд╛ рдХреЗ рд╕рдореАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ y= рдЕрд▓реНрдлрд╛рдПрдХреНрд╕+ рдмреАрдЯрд╛ , рдЕрд░реНрдерд╛рддреН, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЧреБрдгрд╛рдВрдХ рдвреВрдВрдврдирд╛ рд╣реИ  рдЕрд▓реНрдлрд╛ рдФрд░  рдмреАрдЯрд╛ ред рдпрд╣ рдЕрднреНрдпрд╛рд╕ рд╕реНрдХреВрд▓ рдХреА рд╕рд╛рддрд╡реАрдВ-рдЖрдард╡реАрдВ рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣рдо рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

\ рдмрд╛рдИрдВ \ {\ _ рд╢реБрд░реВ {рд╡рд┐рднрд╛рдЬрд┐рдд} \ рдЕрд▓реНрдлрд╛ x_1 + \ рдмреАрдЯрд╛ & = y_1 \\ \ рдЕрд▓реНрдлрд╛ x_2 + \ beta & = y_2 \\ \ end {рд╡рд┐рднрд╛рдЬрди} \ рд╕рд╣реАред



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд╕рд╛рде рджреЛ рд╕рдореАрдХрд░рдг рд╣реИрдВ (  рдЕрд▓реНрдлрд╛ рдФрд░  рдмреАрдЯрд╛ ), рд╢реЗрд╖ рдЬреНрдЮрд╛рдд рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рдорд╛рдзрд╛рди рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

\ underbrace {\ start {bmatrix} x_1 & 1 \\ x_2 & 1 \ end {bmatrix}} _ _: = A} \ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {\ start {bmatrix} \ рдЕрд▓реНрдлрд╛ \\ \ рдмреАрдЯрд╛ рдЕрдВрдд {bmatrix}} _ {: = x} = \ underbrace {\ start {bmatrix} y_1 \\ y_2 \ end {bmatrix}} _ {: = b}



рд╣рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рдореАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЕрдХреНрд╖=рдмреА рдЬреЛ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ xтИЧ=AтИТ1b ред

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рддреАрди рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреА рд╣реИ:

\ рдмрд╛рдИрдВ \ _ \ _ рд╢реБрд░реВ {рд╡рд┐рднрд╛рдЬрд┐рдд} \ рдЕрд▓реНрдлрд╛ x_1 + \ рдмреАрдЯрд╛ & = y_1 \\ \ рдЕрд▓реНрдлрд╛ x_2 + \ рдмреАрдЯрд╛ & = y_2 \\ \ рдЕрд▓реНрдлрд╛ x_3 + \ рдмреАрдЯрд╛ рдФрд░ = y_3 \\ \ рдЕрдВрдд {рд╡рд┐рднрд╛рдЬрди} рд╕рд╣реА ред



рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ:

\ underbrace {\ start {bmatrix} x_1 & 1 \\ x_2 & 1 \\ x_3 & 1 \ end {bmatrix}} _ {: = A \ _, (3 \ рдЯрд╛рдЗрдореНрд╕ 2)} \ underbrace (\ start {bmatrix)} \ рдЕрд▓реНрдлрд╛ \\ \ рдмреАрдЯрд╛ \ рдЕрдВрдд {bmatrix}} _ {: = x \; (2 \ рдмрд╛рд░ 1)} = \ underbrace {\ start {bmatrix} y_1 \\ y_2 \\ y_3 \ рдЕрдВрдд {brixrix}} _ { : = b \ _, (3 \ _ 1)}


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдП рдЖрдпрддрд╛рдХрд╛рд░, рдФрд░ рдпрд╣ рдмрд╕ рд░рд┐рд╡рд░реНрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ! рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рджреЛ рдЪрд░ рдФрд░ рддреАрди рд╕рдореАрдХрд░рдг рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрдм рдЕрдВрдХ рд╢реЛрд░ рдорд╛рдк рд╕реЗ рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ  рдЕрд▓реНрдлрд╛ рдФрд░  рдмреАрдЯрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рдк рдбреЗрдЯрд╛ред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рдЬрдм рдлреМрд▓рд╛рджреА рдЕрдВрд╢рд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рддрдм рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдмреАрдЬрдЧрдгрд┐рдд рдФрд░ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рдерд╛ред рдЖрдЗрдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

\ Alpha \ underbrace {\ start {bmatrix} x_1 \\ x_2 \\ x_3 \ end {bmatrix}} _ _: = \ vec {i}} + \ beta \ underbrace {\ start \ _ bmatrix} 1 \\ 1 \ _ \ 1 \ end {bmatrix}} _ {: = \ vec {j}} = \ start {bmatrix} y_1 \\ y_2 \\ y_3 \ end {bmatrix}


рдпрд╛, рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ,

 Alpha veci+ beta vecj= vecbред


рд╡реИрдХреНрдЯрд░  vecрдореИрдВ ред  vecj рдФрд░  vecb рдЬреНрдЮрд╛рдд рд╣реИ, рд╕реНрдХреЗрд▓рд░ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ  рдЕрд▓реНрдлрд╛ рдФрд░  рдмреАрдЯрд╛ ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ рд░реИрдЦрд┐рдХ рд╕рдВрдпреЛрдЬрди  Alpha veci+ Beta vecj рдПрдХ рд╡рд┐рдорд╛рди рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡реЗрдХреНрдЯрд░  vecb рдЗрд╕ рд╡рд┐рдорд╛рди рдореЗрдВ рдЭреВрда рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдИ рд╕рдЯреАрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдгрдп рддреНрд░реБрдЯрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ  vece( Alpha, Beta):= Alpha veci+ beta vecjтИТ vecb ред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдРрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ  рдЕрд▓реНрдлрд╛ рдФрд░  рдмреАрдЯрд╛ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ  vece( рдЕрд▓реНрдлрд╛, рдмреАрдЯрд╛) ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ  mathrmargmin Alpha, beta | vece( Alpha, beta) | ред
рдпрд╣рд╛рдБ рдПрдХ рдЪрд┐рддреНрд░рдг рд╣реИ:



рд╡реИрдХреНрдЯрд░ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж  vecрдореИрдВ ред  vecj рдФрд░  vecb , рд╣рдо рддреНрд░реБрдЯрд┐ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ  vecрдИ ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХрдо рд╕реЗ рдХрдо рд╣реИ рдпрджрд┐ рдпрд╣ рд╡реИрдХреНрдЯрд░ рдкрд░ рдлреИрд▓рд╛ рд╣реБрдЖ рд╡рд┐рдорд╛рди рдХреЗ рд▓рдВрдмрд╡рдд рд╣реИ  vecрдореИрдВ рдФрд░  vecj ред

рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рд╕рдмрд╕реЗ рдХрдо рд╡рд░реНрдЧ рдХрд╣рд╛рдВ рд╣реИрдВ? рдЕрдм рд╡реЗ рд╣реЛрдВрдЧреЗред рд░реВрдЯ рдирд┐рд╖реНрдХрд░реНрд╖рдг рд╕рдорд╛рд░реЛрд╣  sqrt cdot рдиреАрд░рд╕ рдЗрд╕рд▓рд┐рдП  mathrmargmin Alpha, beta | vece( Alpha, beta) | =  mathrmargmin Alpha, beta | vece( Alpha, beta) |2 !

рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╡реИрдХреНрдЯрд░ рдкрд░ рдлреИрд▓рд╛ рд╣реБрдЖ рд╡рд┐рдорд╛рди рдХреЗ рд▓рдВрдмрд╡рдд рд╣реИ  vecрдореИрдВ рдФрд░  vecj , рдЬреЛ рдЗрд╕реА рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

\ рдмрд╛рдПрдБ \ {\ рд╢реБрд░реВ {рд╡рд┐рднрд╛рдЬрд┐рдд} \ vec {i} ^ \ рд╢реАрд░реНрд╖ \ vec {e} (\ рдЕрд▓реНрдлрд╛, \ рдмреАрдЯрд╛) & = 0 \\ \ vec {j} ^ \ top \ vec {e} (\ рдЕрд▓реНрдлрд╛, \ рдмреАрдЯрд╛) & = 0 \ end {рд╡рд┐рднрд╛рдЬрди} \ рд╕рд╣реАред



рдореИрдЯреНрд░рд┐рдХреНрд╕ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЙрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

\ start {bmatrix} x_1 & x_2 & x_3 \\ 1 & 1 & 1 \ рдЕрдВрдд {bmatrix} \ рдмрд╛рдПрдБ (\ Alpha \ start {bmatrix} x_1 \\ x_2 \\ x_3 \ рдЕрдВрдд \ bmatrix} + \ Beta \ start {bmatrix} 1 \\ 1 \\ 1 \\ 1 \ end {bmatrix} - \ start {bmatrix} y_1 \\ y_2 \\ y_3 \ end {bmatrix} \ right) = \ start {bmatrix} \\ 0 \ end {bmatrix }


рдпрд╛ рдФрд░

\ start {bmatrix} x_1 & x_2 & x_3 \\ 1 & 1 & 1 \ рдЕрдВрдд {bmatrix} \ рдмрд╛рдПрдБ (\ start {bmatrix} x_1 & 1 \\ x_2 & 1 \\ x_3 & 1 \ end {bmatrix}) рд╢реБрд░реВ {bmatrix} \ рдЕрд▓реНрдлрд╛ \\ \ рдмреАрдЯрд╛ \ рдЕрдВрдд {bmatrix} - \ start {bmatrix} y_1 \\ y_2 \\ y_3 \ end {bmatrix} \ right) = \ start {bmatrix} \\ 0 \ end {bmatrix }


рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдФрд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

A top(AxтИТb)= startbmatrix00 endbmatrix


рдФрд░ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди:

A рд╢реАрд░реНрд╖Ax=A рд╢реАрд░реНрд╖bред


рдЖрдЗрдП рдЖрдпрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ 3 2 рдЗрд╕рд▓рд┐рдпреЗ рдП рдЯреЙрдк рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ 2рдмрд╛рд░2 ред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдм рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ 3 рдЧреБрдирд╛1 рд▓реЗрдХрд┐рди рд╡реЗрдХреНрдЯрд░ рдП рдЯреЙрдкрдмреА рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ 2рдмрд╛рд░1 ред рдпрд╣реА рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рдЯреЙрдк рдкреНрд░рддрд┐рд╡рд░реНрддреА! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдП рдЯреЙрдк рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред

рдкреНрд░рдореЗрдп рек


рдП рдЯреЙрдк рд╕рдордорд┐рддред

рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

(рдП рдЯреЙрдкрдП) рдЯреЙрдк=рдП рдЯреЙрдк(рдП рдЯреЙрдк) рдЯреЙрдк=рдПрдЯреЙрдкрдЯреЙрдкрдП$



рдкреНрд░рдореЗрдп рел


рдП рдЯреЙрдк рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрд░реНрдз-рдирд┐рд╢реНрдЪрд┐рдд:  forallx in mathbbRn quadx topA topAx geed0.

рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╣реИ рдХрд┐ x рд╢реАрд░реНрд╖A topAx=(x) рд╢реАрд░реНрд╖Ax>0 ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдП рдЯреЙрдк рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдпрджрд┐ рдП рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХреЙрд▓рдо (рд░реИрдВрдХ) рд╣реИ рдП рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЪрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░)ред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рджреЛ рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдиреНрдпреВрдирддрдордХрд░рдг  mathrmargmin Alpha, beta | vece( Alpha, beta) |2 рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ A topAx=A bb ред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рддрд░реНрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреАрдЬрдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд▓рд┐рдЦреЗрдВред рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдЪрд┐рдд рд░реВрдк рдХреЗ рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдиреНрдпреВрдирддрдо рдкрд░ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рддреЛ, рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:

\ start {рд╡рд┐рднрд╛рдЬрд┐рдд} \ mathrm {argmin} \ | Ax - b \ _ ^ 2 & = \ mathrm {argmin} (Ax-b) ^ \ top (Ax-b) = \\ & = \ mathrm {argmin} (x ^ \ top A ^ \ рдЯреЙрдк - b \ _) рд╢реАрд░реНрд╖) (Ax-b) = \\ & = \ mathrm {argmin} (x ^ \ top A ^ \ top A x - b ^ \ top Ax - x ^ \ top A ^ \ top b + \ underbrace {b ^ \ Top b} _ {\ rm const}) = \\ & = \ mathrm {argmin} (x ^ \ top A ^ \ top A x - 2b ^ \ top Ax) = \\ & = \ mathrm {armmin} ( x ^ \ рдЯреЙрдк \ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {(рдП ^ \ рдЯреЙрдк рдП)} _ {: = рдП '} рдПрдХреНрд╕ - 2 \ рдЕрдВрдбрд░рдмреНрд░реЗрд╕ {(рдП ^ \ рдЯреЙрдк рдмреА)} _ {: = b'} \ рдкреНрд░реЗрдд {} ^ рдЯреЙрдк x) \ end {рд╡рд┐рднрд╛рдЬрд┐рдд}


рддреЛ рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ \ mathrm {argmin} \ | рдХреБрд▓реНрд╣рд╛рдбрд╝реА - b \ _ ^ 2 рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░  рдореАрдЯрд░ рдПрдХ рдЯреА рдПрдЪ рдЖрд░ рдПрдо рдПрдХ рдЖрд░ рдЬреА рдПрдо рдореИрдВ n ( рдПрдХреНрд╕  рдЯреА рдУ рдкреА рдП ' рдПрдХреНрд╕ - 2 рдЦ '  рдЯреА рдУ рдкреА рдПрдХреНрд╕ ) (рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ) рдПрдХ рд╕рдордорд┐рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП тА▓ , рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдПрдХ ' рдПрдХреНрд╕ = рдЦ ' ред рд╡рд╛рд╣ред рд╕рд┐рджреНрдзрд╛рдВрдд рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ


рдЙрджрд╛рд╣рд░рдг рд╡рди, рд╡рди-рдбрд╛рдпрдореЗрдВрд╢рдирд▓


рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ:

 # initialize the data array x = [0.] * 32 x[0] = x[31] = 1. x[18] = 2. # smooth the array values other than at indices 0,18,31 for iter in range(1000): for i in range(len(x)): if i in [0,18,31]: continue x[i] = (x[i-1] + x[i+1])/2. 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 32 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдХреНрд╕ рд╕рд░рдгреА рд╣реИ, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдФрд░ рдлрд┐рд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдХрд░реЗрдВрдЧреЗ: рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ x [i] рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдореЗрдВ рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдФрд╕рдд рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ: x [i] = (x [i-1] + x [i + 1]) / 2ред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж: рд╣рдо рд╕рдВрдЦреНрдпрд╛ 0, 18 рдФрд░ 31 рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рд░рдгреА рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдкрд╣рд▓реЗ рд╕реМ рдФрд░ рдкрдЪрд╛рд╕ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдерд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЪрд╛рд░-рд▓рд╛рдЗрди рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдЧрд╛рдХреЙрдб, рдЧреЙрд╕-рд╕реАрдбреЗрд▓ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдирд┐рдореНрди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ:



рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ? рдХреИрд╕рд╛ рдЬрд╛рджреВ? рдЖрдЗрдП рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЦреБрджрд╛рдИ рдХрд░реЗрдВ, рдФрд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА 32 рдЪрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВред рдпрд╣ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкрдбрд╝реЛрд╕реА рддрддреНрд╡ рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ:



рдЙрдкрд░реЛрдХреНрдд рдкрд╛рдпрдерди рдХреЛрдб, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рддреАрди рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ рд╣реИ: x0, x18, x31, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд, рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд╕реЗрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░реЗрдВ



рдореИрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди x0 = 1 рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реВрдВ, рдкрд╣рд▓рд╛ рд╕рдореАрдХрд░рдг X1 = x0 = 1 рдХрд╣рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рдореАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ x2 = X1 = x0 = 1 рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рд╣рдо рд╕рдореАрдХрд░рдг 1 = x0 = x17 = x18 = 2 рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ ред рдУрд╣ред рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рд╣реИ: (

рдФрд░ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ! рдЪрд▓реЛ рдорджрдж рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреЛ рдмреБрд▓рд╛рдУ! рд╣рдорд╛рд░реА рдЕрд╕рд╛рдзреНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕ рдХ реН рд╖ = рдм реА ; рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдПрдХ тКд рдПрдХ рдПрдХреНрд╕ = рдПрдХ тКд рдЦ редрдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ-рдореЗрдВ-рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ!

рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рд╣рдо рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╕рдорд╛рдирддрд╛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВx i рдмрд░рд╛рдмрд░ рдерд╛x i + 1 рд╣реИ , рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдореАрдХрд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВx i - x i + 1 = 0 , рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд╕рдВрдд рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЦреАрдВрдЪ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ x0, x18, рдФрд░ x31 рдХреЗ рдореВрд▓реНрдп рджреГрдврд╝рддрд╛ рд╕реЗ рддрдп рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдореБрдлреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рдЙрддреНрдкрд╛рджрди (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдПрдХ рдЯреБрдХрдбрд╝рд╛-рд░реЗрдЦреАрдп рд╕рдорд╛рдзрд╛рдиред рдЖрдЗрдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЧреЙрд╕-рд╕реАрдбреЗрд▓ рд╡рд┐рдзрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЕрднрд┐рд╕рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдПрдХ-рдЖрдпрд╛рдореА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



 import numpy as np n = 32 # size of the vector to produce # fill the matrix with 2nd order finite differences A = np.matrix(np.zeros((n-1, n))) for i in range(0,n-1): A[i, i] = -1. A[i, i+1] = 1. # eliminate the constrained variables from the matrix A = A[:,[*range(1,18)] + [*range(19,31)]] b = np.matrix(np.zeros((n-1, 1))) b[0,0] = 1. b[17,0] = -2. b[18,0] = 2. b[n-2,0] = -1. # solve the system x = np.linalg.inv(A.transpose()*A)*A.transpose()*b x = x.transpose().tolist()[0] # re-introduce the constrained variables x.insert(0, 1.) x.insert(18, 2.) x.append(1.) 

рдпрд╣ рдХреЛрдб 32 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА x рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╛рдзрд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВрдП , рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдгрдмреА , рд╣рдо рдПрдХ рд╕реЙрд▓реНрдпреВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВрдПрдХреНрд╕ = ( рдПрдХ тКд рдПрдХ ) - 1 рдПрдХ тКд рдЦ , рдФрд░ рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рддреЛ рдбрд╛рд▓рд╛ рд╣рдорд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди x0 = 1, x18 = x31 = 2 рдФрд░ 1ред рдпрд╣ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реИред рдХреНрдпрд╛ рдзреЛрдЦрд╛ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджреЗрдЦреЗрдВ:



 import numpy as np n = 32 # size of the vector to produce # fill the matrix with 2nd order finite differences A = np.matrix(np.zeros((n-1+3, n))) for i in range(0,n-1): A[i, i] = -1. A[i, i+1] = 1. # enforce the constraints through the quadratic penalty A[n-1+0, 0] = 100. A[n-1+1,18] = 100. A[n-1+2,31] = 100. b = np.matrix(np.zeros((n-1+3, 1))) b[n-1+0,0] = 100.*1. b[n-1+1,0] = 100.*2. b[n-1+2,0] = 100.*1. # solve the system x = np.linalg.inv(A.transpose()*A)*A.transpose()*b x = x.transpose().tolist()[0] 

рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╡реЗрдХреНрдЯрд░ x рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рдо рдХреЗ рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП рдФрд░ рдмреА рдмрд╣реБрдд рдЖрд╕рд╛рди рдореЗрдВ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд╛рд▓ рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рд╣рдо рдЬреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦреЗрдВ:



рдкрд┐рдЫрд▓реЗ рддреАрди рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВ:
100 x0 = 100 * 1
100 x18 = 100 * 2
100 x31 = 100 * 1

рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
x0 = 1
x18 = 2
x31 = 1

рдирд╣реАрдВ, рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛, рдкреНрд░рддреНрдпреЗрдХ рд╕рдореАрдХрд░рдг рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рд▓рдЯрдХрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, x0 рдФрд░ рдорд╛рди 1 рдХреЗ рдмреАрдЪ рд╡рд╕рдВрдд, x18 рдФрд░ рдорд╛рди 2 рдХреЗ рдмреАрдЪ рд╡рд╕рдВрдд, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЪрд░ x31 рднреА рдПрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди 100 рдХрд╛ рдЧреБрдгрд╛рдВрдХ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рд╣реИред рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рд┐рд░реНрдл рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЕрд░реНрде рдореЗрдВ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рддреАрди рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ 100 рдЧреБрдгрд╛рдВрдХ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдорд╛рдиреЛрдВ рд╕реЗ x0, x18 рдФрд░ x32 рдХреЗ рд╡рд┐рдЪрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рджрдВрдб рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рджрд╕ рд╣рдЬрд╛рд░ рдЧреБрдирд╛ (100 ^ 2) рд╕рдорд╛рдирддрд╛ рд╕реЗ рднрдЯрдХрдиреЗ рдХреЗ рд▓рд┐рдП рджрдВрдб рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВредx i = x i + 1 редрдореЛрдЯреЗ рддреМрд░ рдкрд░, рдкрд┐рдЫрд▓реЗ рддреАрди рд╕рдореАрдХрд░рдгреЛрдВ рдкрд░ рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рдЕрдиреНрдп рд╕рднреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд╕ рд╣рдЬрд╛рд░ рдЧреБрдирд╛ рдХрдард┐рди рд╣реИред рдпрд╣ рджреНрд╡рд┐рдШрд╛рдд рджрдВрдб рд╡рд┐рдзрд┐ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рдпрд╣ рдЪрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрдо рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдорд┐рдпрд╛рдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ) рд╣реИред

рдЙрджрд╛рд╣рд░рдг рджреЛ, рддреАрди рдЖрдпрд╛рдореА


рдЪрд▓реЛ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ! рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред рдореИрдВ рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рддрд╣ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рд╕реАрдорд╛ рддрдп рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдмрд╛рдХреА рд╕рддрд╣ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЪрд┐рдХрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ :



рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ , рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдореБрдЦреНрдп рдлрд╛рдЗрд▓ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреВрдВрдЧрд╛:

 #include <vector> #include <iostream> #include "OpenNL_psm.h" #include "geometry.h" #include "model.h" int main(int argc, char** argv) { if (argc<2) { std::cerr << "Usage: " << argv[0] << " obj/model.obj" << std::endl; return 1; } Model m(argv[1]); for (int d=0; d<3; d++) { // solve for x, y and z separately nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, m.nverts()); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); for (int i=0; i<m.nhalfedges(); i++) { // fix the boundary vertices if (m.opp(i)!=-1) continue; int v = m.from(i); nlRowScaling(100.); nlBegin(NL_ROW); nlCoefficient(v, 1); nlRightHandSide(m.point(v)[d]); nlEnd(NL_ROW); } for (int i=0; i<m.nhalfedges(); i++) { // smooth the interior if (m.opp(i)==-1) continue; int v1 = m.from(i); int v2 = m.to(i); nlRowScaling(1.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlEnd(NL_ROW); } nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); nlSolve(); for (int i=0; i<m.nverts(); i++) { m.point(i)[d] = nlGetVariable(i); } } std::cout << m; return 0; } 

рдореИрдВрдиреЗ рд╡реЗрд╡рдлреНрд░рдВрдЯ .obj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбрд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╕реЙрд▓реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдУрдкрдирдПрдирдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рд╡рд┐рд░рд▓ рдореИрдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реЙрд▓реНрд╡рд░ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдпрд╛рдо рд╡рд┐рд╢рд╛рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо 1000 x 1000 рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕A per A рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЦ рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрдЧрд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрддреНрд╡ рдЕрдХреНрд╕рд░ рд╢реВрдиреНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рд╡рд┐рд╢реЗрд╖ рд╕реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдЖрдЗрдП рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реЙрд▓реНрд╡рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:



  nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, m.nverts()); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); 

рдореБрдЭреЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЪрд╛рд╣рд┐рдП рдПрдХ тКд рдПрдХ рдЖрдХрд╛рд░ (Colville рдХреЛрдиреЗ) x (Colville рдХреЛрдиреЗ)ред рдзреНрдпрд╛рди рджреЗрдВ, рд╣рдо рд╕реЙрд▓реНрд╡рд░ рдХреЛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЗрддреЗ рд╣реИрдВрдП , рдФрд░A very A рд╡рд╣ рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реНрд╡рдпрдВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕, рд╡рд╛рдИ рдФрд░ рдЬреЗрдб рдХреЗ рд▓рд┐рдП рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рддреАрди (рдореИрдВрдиреЗ рдЭреВрда рдмреЛрд▓рд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рддреАрди рдЖрдпрд╛рдореА рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЖрдпрд╛рдореА рд╣реИ!)рдФрд░ рдлрд┐рд░ рдореИрдВ рд╣рдорд╛рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкрдВрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкрдВрдХреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рддрд╣ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдЦрдбрд╝реЗ рдХреЛрдиреЗ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реВрдВ:



  for (int i=0; i<m.nhalfedges(); i++) { // fix the boundary vertices if (m.opp(i)!=-1) continue; int v = m.from(i); nlRowScaling(100.); nlBegin(NL_ROW); nlCoefficient(v, 1); nlRightHandSide(m.point(v)[d]); nlEnd(NL_ROW); } 

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдХреЛрдиреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 100 ^ 2 рдХреЗ рд╡рд░реНрдЧ рджрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЦреИрд░, рдлрд┐рд░ рдЖрд╕рдиреНрди рдХреЛрдиреЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрдирдХреЗ рдмреАрдЪ рдХрдареЛрд░рддрд╛ 1 рдХрд╛ рдПрдХ рд╡рд╕рдВрдд рд▓рдЯрдХрд╛рддрд╛ рд╣реВрдВ:

  for (int i=0; i<m.nhalfedges(); i++) { // smooth the interior if (m.opp(i)==-1) continue; int v1 = m.from(i); int v2 = m.to(i); nlRowScaling(1.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlEnd(NL_ROW); } 

рд╣рдо рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдШреБрдорд╛рд╡рджрд╛рд░ рддрд╛рд░ рдкрд░ рд╕рд╛рдмреБрди рдлрд┐рд▓реНрдо рдХреА рд╕рддрд╣ рдореЗрдВ рдЪреЗрд╣рд░рд╛ рдХреИрд╕реЗ рдЪрд┐рдХрдирд╛ рд╣реБрдЖ рд╣реИред рд╣рдордиреЗ рдиреНрдпреВрдирддрдо рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рддрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП, рдбрд┐рд░рд┐рдХреНрд▓реЗрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ


рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдПрдХ рдЧреЙрдХреЗрдЯреЗрдХ рдорд╛рд╕реНрдХ рдореЗрдВ рдмрджрд▓ рджреЗрдВ:



рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджрд┐рдЦрд╛рдпрд╛ рдерд╛ рдХрд┐ рдШреБрдЯрдиреЗ рдкрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдЪреМрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

  for (int d=0; d<3; d++) { // solve for x, y and z separately nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, m.nverts()); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); for (int i=0; i<m.nhalfedges(); i++) { // fix the boundary vertices if (m.opp(i)!=-1) continue; int v = m.from(i); nlRowScaling(100.); nlBegin(NL_ROW); nlCoefficient(v, 1); nlRightHandSide(m.point(v)[d]); nlEnd(NL_ROW); } for (int i=0; i<m.nhalfedges(); i++) { // light attachment to the original geometry if (m.opp(i)==-1) continue; int v1 = m.from(i); int v2 = m.to(i); nlRowScaling(.2); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlRightHandSide(m.point(v1)[d] - m.point(v2)[d]); nlEnd(NL_ROW); } for (int v=0; v<m.nverts(); v++) { // amplify the curvature nlRowScaling(1.); nlBegin(NL_ROW); int nneigh = m.incident_halfedges(v).size(); nlCoefficient(v, nneigh); Vec3f curvature = m.point(v)*nneigh; for (int hid : m.incident_halfedges(v)) { nlCoefficient(m.to(hid), -1); curvature = curvature - m.point(m.to(hid)); } nlRightHandSide(2.5*curvature[d]); nlEnd(NL_ROW); } nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); nlSolve(); for (int i=0; i<m.nverts(); i++) { m.point(i)[d] = nlGetVariable(i); } } 

рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рд╡рд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдХреЛрдиреЗ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд▓рд┐рдП рдореИрдВ (рдЪреБрдкрдЪрд╛рдк, 0.2 рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде) рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХрд╛ рдореВрд▓ рд╕рддрд╣ рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рд╣реЛ:

  for (int i=0; i<m.nhalfedges(); i++) { // light attachment to the original geometry if (m.opp(i)==-1) continue; int v1 = m.from(i); int v2 = m.to(i); nlRowScaling(.2); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlRightHandSide(m.point(v1)[d] - m.point(v2)[d]); nlEnd(NL_ROW); } 

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡реИрд╕реЗ рд╣реА рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЖрдЙрдЯрдкреБрдЯ рдмреЙрд░реНрдбрд░ рдЗрдирдкреБрдЯ рдмреЙрд░реНрдбрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЕрдВрддрд░ рдЗрдирдкреБрдЯ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗ!

  for (int v=0; v<m.nverts(); v++) { // amplify the curvature nlRowScaling(1.); nlBegin(NL_ROW); int nneigh = m.incident_halfedges(v).size(); nlCoefficient(v, nneigh); Vec3f curvature = m.point(v)*nneigh; for (int hid : m.incident_halfedges(v)) { nlCoefficient(m.to(hid), -1); curvature = curvature - m.point(m.to(hid)); } nlRightHandSide(2.5*curvature[d]); nlEnd(NL_ROW); } 

рдореИрдВ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдореАрдХрд░рдг рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрдирдкреБрдЯ рд╕рддрд╣ рдореЗрдВ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреА рд╕рддрд╣ рдХреА рд╡рдХреНрд░рддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ рдврд╛рдИ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рдд рдЖрдЙрдЯрдкреБрдЯ рд╕рддрд╣ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рдмрдбрд╝реА рд╡рдХреНрд░рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рд╕реЙрд▓реНрд╡рд░ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреИрд░рд┐рдХреЗрдЪрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЬ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг


рдЗрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рдПрдХ рднреА рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЪреМрд░рд╕рд╛рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдХрдо рддреБрдЪреНрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╕реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ , рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╕реВрдЪреА рджреВрдВрдЧрд╛:

 #include <vector> #include <iostream> #include "OpenNL_psm.h" #include "geometry.h" #include "model.h" const Vec3f axes[] = {Vec3f(1,0,0), Vec3f(-1,0,0), Vec3f(0,1,0), Vec3f(0,-1,0), Vec3f(0,0,1), Vec3f(0,0,-1)}; int snap(Vec3f n) { // returns the coordinate axis closest to the given normal double nmin = -2.0; int imin = -1; for (int i=0; i<6; i++) { double t = n*axes[i]; if (t>nmin) { nmin = t; imin = i; } } return imin; } int main(int argc, char** argv) { if (argc<2) { std::cerr << "Usage: " << argv[0] << " obj/model.obj" << std::endl; return 1; } Model m(argv[1]); std::vector<int> nearest_axis(m.nfaces()); for (int i=0; i<m.nfaces(); i++) { Vec3f v[3]; for (int j=0; j<3; j++) v[j] = m.point(m.vert(i, j)); Vec3f n = cross(v[1]-v[0], v[2]-v[0]).normalize(); nearest_axis[i] = snap(n); } for (int d=0; d<3; d++) { // solve for x, y and z separately nlNewContext(); nlSolverParameteri(NL_NB_VARIABLES, m.nverts()); nlSolverParameteri(NL_LEAST_SQUARES, NL_TRUE); nlBegin(NL_SYSTEM); nlBegin(NL_MATRIX); for (int i=0; i<m.nhalfedges(); i++) { int v1 = m.from(i); int v2 = m.to(i); nlRowScaling(1.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlRightHandSide(m.point(v1)[d] - m.point(v2)[d]); nlEnd(NL_ROW); int axis = nearest_axis[i/3]/2; if (d!=axis) continue; nlRowScaling(2.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlEnd(NL_ROW); } nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); nlSolve(); for (int i=0; i<m.nverts(); i++) { m.point(i)[d] = nlGetVariable(i); } } std::cout << m; return 0; } 

рд╣рдо рдЕрднреА рднреА рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╕рддрд╣ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╕реНрдиреИрдк () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдХреМрди рд╕рд╛ рдЕрдХреНрд╖ рдЗрд╕ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддреНрд░рд┐рднреБрдЬ рдЕрдзрд┐рдХ рд▓рдВрдмрд╡рдд рдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рд╣реИред рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреА рд╕рддрд╣ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреНрд╖реИрддрд┐рдЬ рдХреЗ рдХрд░реАрдм рдЬреЛ рд╣реЛ рд╡рд╣ рдФрд░ рднреА рдХрд░реАрдм рд╣реЛ рдЬрд╛рдП! рдЗрд╕ рддрд╕реНрд╡реАрд░ рдХрд╛ рдмрд╛рдпрд╛рдВ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдиреИрдк () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ:



рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рддреАрди рдЕрдХреНрд╖реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк, рд╣рдорд╛рд░реА рд╕рддрд╣ рдХреЛ рддреАрди рд░рдВрдЧреЛрдВ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдлрд┐рд░, рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдореАрдХрд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

  nlRowScaling(1.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlRightHandSide(m.point(v1)[d] - m.point(v2)[d]); nlEnd(NL_ROW); 

рдпрд╣реА рд╣реИ, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рд╕рддрд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдЗрдирдкреБрдЯ рд╕рддрд╣ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдорд┐рд▓рддреЗ рдЬреБрд▓рддреЗ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВред рд╡рд╕рдВрдд рдХреА рдХрдареЛрд░рддрд╛ 1. рдФрд░ рдлрд┐рд░, рдпрджрд┐ рд╣рдо рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рдо x, рдФрд░ рдХрд┐рдирд╛рд░реЗ рдХреЛ рд▓рдВрдмрд╡рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдо рдмрд╕ рдпрд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╕рдВрдд рдХреА рдХрдареЛрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реАрд░реНрд╖ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред 2:

  nlRowScaling(2.); nlBegin(NL_ROW); nlCoefficient(v1, 1); nlCoefficient(v2, -1); nlEnd(NL_ROW); 

рдЦреИрд░, рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ: рдПрдХ



рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди: рдИрд╕реНрдЯрд░ рджреНрд╡реАрдк рд╕реЗ рдореВрд░реНрддрд┐рдпреЛрдВ, рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рднреВрд╡рд┐рдЬреНрдЮрд╛рди рдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ?

рд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓редрдЪрд▓реЛ рдкреГрдереНрд╡реА рдХреА рдкрдкрдбрд╝реА рдХрд╛ рдПрдХ рдЦрдВрдб рд▓реЗрддреЗ рд╣реИрдВ:



рднреВрд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреА рдкрд░рддреЗрдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╕реАрдорд╛рдПрдВ (рдХреНрд╖рд┐рддрд┐рдЬ) рдЬрд┐рдирдХреЗ рдмреАрдЪ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рднреВрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рджреЛрд╖ рдЬреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рддреНрд░рд┐рднреБрдЬреЛрдВ (3 рдбреА рдореЗрдВ рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЛрди) рдХрд╛ рдПрдХ рдЧреНрд░рд┐рдб рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рдбреНрд╕ (3 рдбреА рдореЗрдВ рд╣реЗрдХреНрд╕рд╛рд╣реЗрдбреНрд░реЛрди) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рджреЛрд╖ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╣реЛ рдЬрд╛рдПрдВ рдФрд░ рдХреНрд╖рд┐рддрд┐рдЬ (рдЖрд╢реНрдЪрд░реНрдп) рдХреНрд╖реИрддрд┐рдЬ:



рдлрд┐рд░ рд╣рдо рдмрд╕ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреНрд░рд┐рдб рд▓реЗрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рдХреЛ рдПрдХрд╕рдорд╛рди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд╡реИрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЧреНрд░рд┐рдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдХрдо рд╕реЗ рдХрдо рдЪреМрдХреЛрд░ рддрд░реАрдХреЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреВрд▓ рд╣реИрдВ, рдФрд░ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХреНрд╕реЗрд▓ рдХреЙрд▓рдо рдореЗрдВ рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд╣реИ, рдФрд░ рд╣рдордиреЗ (рдорд╛рдирд╡рддрд╛) рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрд╛ рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЕрд░рдмреЛрдВ рдЪрд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдорд╛рдирд╡реАрдп рдЖрдХрд╛рд░ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд░реИрдЦрд┐рдХ рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЙрддреНрд╕рд░реНрдЬрди рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рд╡рд╛рд▓рд╛ рдУрдПрд▓рдПрд╕ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд▓рд╛рдЗрди рдкрд░ рд░рд╣реЛ!

Source: https://habr.com/ru/post/hi477192/


All Articles