【Convex Optimization Stanford】Lec4 CVX-opt-promblem

前言

关于拟凸函数(quasiconvex)和凸函数(convex)的例子:

  • f ( x ) = ∣ x ∣ , d o m f = R f(x)=\sqrt{|x|}, domf=R f(x)=x ,domf=R
    该函数显然不是convex函数,因为起二阶导数小于0,但是其是quasiconvex,因为其任何一个sublevel set都是凸的。

谱半径,一个矩阵的所有特征值的绝对值中,最大的值。

Perron-Frobenius特征值
在这里插入图片描述

优化问题的形式

在这里插入图片描述

全局最优与局部最优

在这里插入图片描述

隐式约束

意思就是包含所有函数的定义域的交集。
在这里插入图片描述

凸优化的一些问题

可行性问题

在这里插入图片描述

凸优化问题

即一个凸优化问题仅有凸的目标函数和凸函数的不等式与线形等式的约束构成。
在这里插入图片描述
在这里插入图片描述

一些最优化理论

凸优化问题的最优点

在这里插入图片描述

对于可微分函数的最优化判断

在这里插入图片描述

在这里插入图片描述

等价凸优化问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拟凸优化问题(Quasiconvex problem)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

经典算法的凸优化形式

线性规划

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线性分数规划

在这里插入图片描述
在这里插入图片描述

平方规划(如最小二乘)

在这里插入图片描述
因为目标函数的二阶导数矩阵是半正定的,因此是convex的。

在这里插入图片描述
上图中的 x ∗ x^* x右边的A上伪逆。

带平方限制条件的平方规划(QCQP)

在这里插入图片描述

二阶凸锥规划(SOCP)

在这里插入图片描述

泛化的线性规划

在这里插入图片描述
在这里插入图片描述
上图的方法相当是用椭球体的形式,表达了随机变量 a i T a_i^T aiT的范围。并最终用其最大偏差来小于b,从而实现确定性。
在这里插入图片描述

几何规划

在这里插入图片描述
上述的所有函数,仅需要记住其形式即可。通过如下的转换可以把上述问题转换为凸优化问题的形式,要记住这种转换方式。
在这里插入图片描述

泛化的不等式限制

在这里插入图片描述

半正定规划(SDP)

在这里插入图片描述
线性规划/SOCP作为SDP的形式。
在这里插入图片描述

向量优化

在这里插入图片描述

最优化与帕累托最优点

在这里插入图片描述

多指标优化

在这里插入图片描述

正则化最小二乘

在这里插入图片描述

带风险反馈的

在这里插入图片描述

标量化方法求解多标准优化

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

<think>好的,我现在需要回答用户关于Android中Activity之间传递数据的方法的问题。首先,用户提到了主Activity子Activity之间数据共享,以及使用Intent和Bundle的方式。根据用户提供的引用内容,我需要整理出几种主要的数据传递方法,并确保结构清晰,步骤详细。 首先,用户提供的引用[1]和[3]提到了使用Intent来传递数据,包括putExtra方法和Bundle。引用[2]提到了使用startActivityForResult来接收返回数据。此外,引用[3]还提到了ContentProvider,但用户的问题可能更关注于直接的Intent和Bundle方法,不过可能需要简要提到其他方式作为扩展。 接下来,我需要确定回答的结构。可能分为基本方法(Intent的putExtra)、Bundle的使用、返回数据的方式,然后扩展其他方法如全局变量、SharedPreferences、ContentProvider等。每个部分都需要给出示例代码,并引用对应的参考文献。 需要注意的是,用户可能希望了解如何从主Activity发送数据到子Activity,以及如何从子Activity返回数据。因此,startActivityForResult和onActivityResult的处理是重点之一。另外,确保代码示例正确,符合Android开发规范,比如使用显式Intent,正确处理返回数据。 可能还需要提到使用Bundle来传递大量数据,因为直接使用putExtra可能不够高效或无法处理复杂数据。同时,需要强调数据类型的限制,比如只能传递基本类型、字符串或可序列化的对象。 最后,生成相关问题,涵盖优化方法、安全性、大文件传输、生命周期影响等,帮助用户进一步探索。 现在,需要检查是否有遗漏的方法,例如使用Application类或单例模式来共享数据,或者使用数据库。但根据引用内容,用户提供的资料中没有提到这些,但作为相关知识可以简要提及,但需注意引用来源是否允许。不过用户提供的引用中没有相关说明,所以可能不宜深入。 总结回答的结构: 1. 使用Intent直接传递数据 - putExtra方法 - 代码示例(发送和接收) 2. 使用Bundle传递复杂数据 - 如何创建Bundle并添加数据 - 代码示例 3. 子Activity返回数据给主Activity - startActivityForResult - onActivityResult处理 - 代码示例 4. 扩展方法(简要) - 全局变量/Application类 - SharedPreferences - ContentProvider(如引用中提到的) - 数据库 然后,相关问题可以围绕这些方法展开,如安全性、效率、适用场景等。 需要确保每个步骤都正确引用用户提供的参考文献,例如引用[1]和[3]对应Intent传递数据,引用[2]对应onActivityResult的处理。而ContentProvider在引用[3]中提到,可以作为扩展方法引用。 现在,开始组织回答内容,确保每个部分都有对应的引用标注,代码示例正确,并且语言清晰易懂。同时,生成的示例代码需要符合用户提供的引用中的代码格式,如使用正确的类名和方法。 可能的错误点:是否Bundle需要通过Intent的putExtras方法添加,而不是putExtra。需要确认代码正确性。例如,创建Bundle对象,添加数据,然后intent.putExtras(bundle)。 另外,在返回数据时,子Activity需要调用setResult并传递Intent,然后finish()。主Activity在onActivityResult中处理。 最后,生成的相关问题需要覆盖不同方法的使用场景、优缺点、安全性等,帮助用户进一步学习。</think>在Android开发中,Activity间的数据传递主要通过以下方法实现: --- ### 一、使用Intent直接传递数据 1. **发送数据** 在MainActivity中,通过`Intent.putExtra()`方法添加键值对数据,支持基本数据类型、String及可序列化对象: ```java Intent intent = new Intent(MainActivity.this, SubActivity.class); intent.putExtra("username", "张三"); intent.putExtra("age", 25); startActivity(intent); ``` 2. **接收数据** 在SubActivity中,通过`getIntent()`获取数据: ```java String username = getIntent().getStringExtra("username"); int age = getIntent().getIntExtra("age", 0); // 默认值0 ``` [^1][^3] --- ### 二、通过Bundle传递复杂数据 若需传递多个数据,建议使用`Bundle`封装: 1. **封装数据** ```java Bundle bundle = new Bundle(); bundle.putString("file_path", "/sdcard/test.txt"); bundle.putInt("version", 3); Intent intent = new Intent(this, SubActivity.class); intent.putExtras(bundle); startActivity(intent); ``` 2. **解包数据** ```java Bundle receivedBundle = getIntent().getExtras(); String filePath = receivedBundle.getString("file_path"); int version = receivedBundle.getInt("version"); ``` --- ### 三、子Activity返回数据给主Activity 1. **启动子Activity** 使用`startActivityForResult()`代替`startActivity()`: ```java Intent intent = new Intent(MainActivity.this, SubActivity.class); startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE为自定义请求码 ``` 2. **子Activity返回数据** 在SubActivity中设置返回结果: ```java Intent resultIntent = new Intent(); resultIntent.putExtra("result_key", "操作成功"); setResult(RESULT_OK, resultIntent); finish(); // 关闭当前Activity ``` 3. **主Activity接收结果** 重写`onActivityResult()`方法: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String result = data.getStringExtra("result_key"); // 处理返回数据 } } ``` [^2] --- ### 四、扩展方法 1. **全局共享数据** 通过自定义`Application`类或单例模式存储全局变量,但需注意内存泄漏风险。 2. **持久化存储** 使用`SharedPreferences`或本地数据库(如SQLite)存储需长期保留的数据。 3. **跨进程通信** 大文件或跨进程数据传递可使用`ContentProvider`或`FileProvider`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值