@@ -40,6 +40,7 @@ Notation "A -f B" := (sub_mat A B) (at level 80).
4040
4141
4242
43+
4344Definition f_error {ty} {n:nat} m b x0 x (A: 'M[ftype ty]_n.+1):=
4445 let x_k := X_m_jacobi m x0 b A in
4546 let A_real := FT2R_mat A in
@@ -424,6 +425,69 @@ rewrite -bigmaxr_mulr.
424425 by rewrite size_map size_enum_ord in H1.
425426+ apply /RleP. apply default_rel_ge_0.
426427Qed .
428+ Search (lift ord0 _).
429+ (*** Lemma for error bound on the inverse obtained by jacobi** *)
430+ Lemma jacobi_inverse_mat_norm_bound {ty} {n:nat} k (x0 : 'cV[ftype ty]_n.+1) (A: 'M[ftype ty]_n.+1):
431+ (forall i, finite (BDIV (Zconst ty 1) (A i i ))) ->
432+ (forall i, finite (A i i)) ->
433+ let A_real := FT2R_mat A in
434+ (matrix_inf_norm (FT2R_mat (A_inv_jacobi k x0 A) - A_real^-1) <=
435+ \sum_(j < n.+1) f_error k (e_i j) x0 (col j A_real^-1) A)%Re.
436+ Proof .
437+ intros.
438+ (* assert (Hneq: forall i, (FT2R (A i i) <> 0%Re)).
439+ { intros. by apply BDIV_FT2R_sep_zero. } *)
440+ unfold matrix_inf_norm, row_sum.
441+ apply bigmax_le.
442+ +rewrite size_map.
443+ rewrite size_enum_ord.
444+ auto.
445+ +intros.
446+ rewrite seq_equiv.
447+ rewrite nth_mkseq.
448+ ++assert (H2: forall j,
449+ (Rabs ((FT2R_mat (A_inv_jacobi k x0 A) - A_real^-1)%Ri(inord i) j)
450+ <= f_error k (e_i j) x0 (col j A_real^-1) A)%Re).
451+ { intros.
452+ unfold f_error.
453+ unfold vec_inf_norm.
454+ assert (H3: exists i0, (FT2R_mat (A_inv_jacobi k x0 A) - A_real^-1)%Ri(inord i) j =
455+ seq.nth ).
456+ eapply bigmaxr_ler.
457+
458+ Search (bigmaxr).
459+
460+ (* rewrite seq_equiv. *)
461+ unfold A_inv_jacobi,ith_col_A_inv.
462+ unfold x_fix. unfold diag_matrix_vec_mult_R.
463+ admit.
464+ (* rewrite bigmaxr_ler.
465+ -rewrite size_map size_enum_ord. auto.
466+ -intros. rewrite seq_equiv. rewrite nth_mkseq.
467+ rewrite !mxE. apply Rle_refl. *)
468+ }
469+ induction n as [|n' IHn'].
470+ +++ rewrite big_ord_recl.
471+ rewrite big_ord_recl.
472+ rewrite big_ord0.
473+ rewrite big_ord0.
474+ rewrite addr0.
475+ rewrite addr0.
476+ apply H2.
477+ +++ rewrite big_ord_recl.
478+ setoid_rewrite big_ord_recl at 2.
479+ apply Rplus_le_compat.
480+ - apply H2.
481+ - admit.
482+ (* eapply IHn'.
483+ rewrite lift0 n i0.
484+ remember (FT2R_mat (A_inv_jacobi k x0 A) - A_real^-1) as delta_mat.
485+ remember (\sum_(i0 < n'.+1) Rabs (delta_mat (inord i) (lift ord0 i0))) as lhs.
486+ remember (\sum_(i0 < n'.+1) f_error k (e_i (lift ord0 i0)) x0 (col (lift ord0 i0) A_real^-1) A) as rhs.
487+ assert (lhs <= rhs)%Re.
488+ { apply IHn'. intros. apply H2. } *)
489+ ++rewrite size_map size_enum_ord in H1. assumption.
490+ Admitted .
427491
428492Lemma list_split_l {T} (l : list (T * T)) (a:T * T):
429493 (List.split (a :: l)).1 = (a.1 :: (List.split l).1).
@@ -435,6 +499,7 @@ induction l; simpl; intros; auto.
435499 destruct a; simpl; auto.
436500Qed .
437501
502+
438503Lemma list_split_r {T} (l : list (T * T)) (a:T * T):
439504 (List.split (a :: l)).2 = (a.2 :: (List.split l).2).
440505Proof .
@@ -1059,6 +1124,49 @@ specialize (H6 H5). apply H6.
10591124by rewrite !length_veclist.
10601125Qed .
10611126
1127+ (** State the forward error theorem * *)
1128+ Theorem block_jacobi_forward_error_bound_aux {ty} {n:nat} (delta_D:R)
1129+ (A: 'M[ftype ty]_n.+1) (b: 'cV[ftype ty]_n.+1):
1130+ let A_real := FT2R_mat A in
1131+ let b_real := FT2R_mat b in
1132+ let x:= A_real^-1 *m b_real in
1133+ let R := (vec_inf_norm (A1_diag A_real) * matrix_inf_norm (A2_J_real A_real))%Re in
1134+ let delta := default_rel ty in
1135+ let rho := ((((1 + g ty n.+1) * (1 + delta) *
1136+ g ty n.+1 + delta * (1 + g ty n.+1) +
1137+ g ty n.+1) * (1 + delta) + delta) * R +
1138+ (((1 + g ty n.+1) * (1 + delta) *
1139+ g ty n.+1 + delta * (1 + g ty n.+1) +
1140+ g ty n.+1) * default_abs ty +
1141+ default_abs ty) *
1142+ matrix_inf_norm (A2_J_real A_real) + R)%Re in
1143+ let d_mag := ((g ty n.+1 * (1 + delta) + delta) *
1144+ ((vec_inf_norm (A1_diag A_real) *
1145+ (1 + delta) + default_abs ty) *
1146+ vec_inf_norm b_real) +
1147+ (1 + g ty n.+1) * g1 ty n.+1 (n.+1 - 1) *
1148+ (1 + delta) *
1149+ (vec_inf_norm (A1_diag A_real) *
1150+ (1 + delta) + default_abs ty) +
1151+ g1 ty n.+1 (n.+1 - 1) +
1152+ (vec_inf_norm (A1_diag A_real) * delta +
1153+ default_abs ty) * vec_inf_norm b_real +
1154+ ((((1 + g ty n.+1) * (1 + delta) *
1155+ g ty n.+1 + delta * (1 + g ty n.+1) +
1156+ g ty n.+1) * (1 + delta) + delta) * R +
1157+ (((1 + g ty n.+1) * (1 + delta) *
1158+ g ty n.+1 + delta * (1 + g ty n.+1) +
1159+ g ty n.+1) * default_abs ty +
1160+ default_abs ty) *
1161+ matrix_inf_norm (A2_J_real A_real)) *
1162+ vec_inf_norm (x_fix x b_real A_real))%Re in
1163+ forall x0: 'cV[ftype ty]_n.+1,
1164+ forward_error_cond A x0 b ->
1165+ (forall k:nat,
1166+ (forall i, finite (X_m_jacobi k x0 b A i ord0)) /\
1167+ (f_error k b x0 x A <= rho^k * (f_error 0 b x0 x A) + ((1 - rho^k) / (1 - rho))* d_mag)%Re).
1168+
1169+
10621170(** State the forward error theorem * *)
10631171Theorem jacobi_forward_error_bound_aux {ty} {n:nat}
10641172 (A: 'M[ftype ty]_n.+1) (b: 'cV[ftype ty]_n.+1):
0 commit comments