{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"using LinearAlgebra, Plots"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos considerar a tabela do Exercício 3 da Seção 8.1 do Burden, e aproximá-la por um poliômio $g$ de grau menor ou igual a 3 de forma a minimizar o erro qudrático\n",
"$$\n",
"\\sqrt{\\sum_{i=1}^6 [y_i - g(x_i)]^2},\n",
"$$\n",
"onde $y_i = f(x_i)$ para alguma função $f$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos associar a expressão para o erro quadrático ao produto interno\n",
"$$\n",
"\\langle u, v\\rangle = \\sum_{i=1}^6 u(x_i)v(x_i)\n",
"$$\n",
"pois nesse caso\n",
"$$\n",
"\\langle u-v, u-v\\rangle = \\sum_{i=1}^6 [u(x_i) - v(x_i)]^2.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como um polinômio de grau menor ou igual 3 pode ser escrito na forma\n",
"$$\n",
"g(x) = a_0 + a_1x + a_2x^2 + a_3x^3\n",
"$$\n",
"podemos usar para a construção do sistema normal as funções\n",
"$$\n",
"g_0(x) = 1, \\ g_1(x) = x, \\ g_2(x) = x^2 \\ \\text{e } g_3(x) = x^3 \\ (m+1 = 4)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6×2 Array{Float64,2}:\n",
" 1.0 1.84\n",
" 1.1 1.96\n",
" 1.3 2.21\n",
" 1.5 2.45\n",
" 1.9 2.94\n",
" 2.1 3.18"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Dados\n",
"x = [1.0; 1.1; 1.3; 1.5; 1.9; 2.1]\n",
"y = [1.84; 1.96; 2.21; 2.45; 2.94; 3.18]\n",
"[x y]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Figura com os dados\n",
"scatter(x, y, legend=false)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6×4 Array{Float64,2}:\n",
" 1.0 1.0 1.0 1.0\n",
" 1.0 1.1 1.21 1.331\n",
" 1.0 1.3 1.69 2.197\n",
" 1.0 1.5 2.25 3.375\n",
" 1.0 1.9 3.61 6.859\n",
" 1.0 2.1 4.41 9.261"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Valores das funções g_j nos pontos x_i\n",
"g0 = ones(6); g1 = x; g2 = x.^2; g3 = x.^3\n",
"M=[g0 g1 g2 g3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Com o produto interno definido acima, a matriz do sistema normal coincide com $M^TM$ e o lado direito do sistema normal coincide com $M^Ty$."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4×5 Array{Float64,2}:\n",
" 6.0 8.9 14.17 24.023 14.58\n",
" 8.9 14.17 24.023 42.8629 22.808\n",
" 14.17 24.023 42.8629 79.5192 38.0962\n",
" 24.023 42.8629 79.5192 151.801 67.1883"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Matriz e lado direito do sistema normal\n",
"A = M'*M; b = M'*y\n",
"[A b]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{Float64,1}:\n",
" 0.6290192776395338\n",
" 1.1850097957342056\n",
" 0.03533252044382126\n",
" -0.010047232342362707"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Solução do sistema normal\n",
"a = A\\b"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"g (generic function with 1 method)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Polinômio de grau 3 que ajusta a tabela\n",
"g(x) = a[1] + a[2]*x + a[3]*x^2 + a[4]*x^3"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xx = collect(1.0:0.001:2.1) # Pontos para desenhar o gráfico de g\n",
"plot!(xx, g.(xx)) # gráfico de g mais os pontos da tabela"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.5.1",
"language": "julia",
"name": "julia-1.5"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}